Эффективное нацеливание на конкретный туннель SSH из всех текущих?

Вы можете сделать это:

# {smallestfilenum..largestfilenum}

for i in {805754..999999}; do 
   mv "DBGC180_$i" "DBGC180_$(($i-1))";
done

Попробуйте с небольшим числом (скажем, 805754..805758), чтобы убедиться, что он работает так, как вы ожидаете. Имейте в виду, что если файл с новым именем уже существует, он будет перезаписан.

2
25.12.2016, 11:06
4 ответа

Я бы предложил указать PID соответствующего процесса с помощью $! синтаксисом.

Этап 1: запустить процесс, но на этот раз с переменной, которая содержит произвольное значение PID:

sudo ssh blah@blah 80:localhost:80 & arbpid=$!

Этап 2: Если переменная arbpid сохраняется только при создании туннеля, вы можете использовать ее для целевого убийства процесса в конце вашего скрипта:

kill $arbpid

Другими словами, то, что мы сделали здесь, это пометили ssh-туннель произвольной меткой (которая является переменной и ее значением) и использовали ее для целевого убийства.


Обратите внимание, что между командой и переменной стоит один амперсанд. Как и в случае с одиночными амперсандами после команд Unix, это сделано для того, чтобы команда перед амперсандом выполнялась в другом подпроцессе (фоновом), в то время как вторая команда (создание переменной в данном случае) будет выполняться в текущем процессе (на переднем плане).

4
27.01.2020, 21:56

Это может помочь вам убить последний процесс туннелирования SSH:

kill $(history | grep ssh | tail -n 2 | head -n 1| cut -d' ' -f 2)
-3
27.01.2020, 21:56

Процесс, обеспечивающий туннель, - это процесс, прослушивающий порт 80, поэтому используйте lsof или netstat или ss , чтобы найти это.

lsof -n -i TCP:80 -sTCP:LISTEN -Fp |sed 's/^p//'
netstat -ntlp | awk '$4 ~ /:80$/ {sub(/\/.*/, "", $7); print $7}'
ss -nlpt 'sport = :80' | awk 'NR>1 {split($6, a, ","); print a[2]}'

Обратите внимание, что если вы используете мультиплексирование соединений, это уничтожит все соединения, предоставленные одним и тем же процессом. Если вы используете мультиплексирование, вы можете указать главному процессу прекратить пересылку с помощью управляющей команды cancel .

ssh UWU@IP -S … -O cancel -L 80:localhost:80
1
27.01.2020, 21:56

Если вам известна уникальная строка в командной строке, вы можете использовать pkill :

pkill -f "80:localhost:80"

Флаг -f заставляет pkill выполнять поиск по всему командная строка; без этого флага он будет уничтожать совпадения только по имени процесса, игнорируя аргументы.

3
27.01.2020, 21:56

Теги

Похожие вопросы