Я довольно потерян на этом. Со страницы руководства:
-f Requests ssh to go to background just before command execution.
После запуска SSH с -f
опцией у меня работает туннель. Но после того, как я закончу его использовать, я не знаю, как дальше взаимодействовать с ним. Например, я не могу закрыть туннель SSH, когда закончу с ним.
Обычные методы, которые я знаю, не работают. Например, jobs
ничего не возвращает. Команда ~
не распознана (и я точно не знаю, как ее использовать).
Тем не менее, pgrep
говорит мне, что SSH туннель все еще работает (после того, как я закрыл терминал и т. Д.). Как мне с этим взаимодействовать? Как мне это закрыть?
источник
/tmp/session1
(хотя рекомендуется называть его с использованием % шаблонов - см. Описание ControlPath вman ssh_config
)ssh -S <path-to-socket> -O exit <server>
команды может быть любая строка, но она должна присутствовать. Это немного неуклюже.Я нашел решение здесь: http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/
Лучший способ - Туннели, которые автоматически закрываются
Как уже упоминалось ранее, вместо использования ключа -f -N мы можем просто использовать -f отдельно, но также выполнить команду на удаленном компьютере. Но какую команду следует выполнить, поскольку нам нужно только инициализировать туннель?
Это когда сон может быть самой полезной командой из всех! В этой конкретной ситуации сон имеет два преимущества:
Как они помогают в автоматическом закрытии туннеля ssh, объяснено ниже.
Мы запускаем сессию ssh в фоновом режиме, выполняя команду sleep в течение 10 секунд на удаленной машине. Количество секунд не имеет решающего значения. В то же время мы выполняем vncviewer точно так же, как и раньше:
В этом случае клиент ssh получает команду разорвать сеанс ssh в фоновом режиме (-f), создать туннель (-L 25901: 127.0.0.1: 5901) и выполнить команду sleep на удаленном сервере в течение 10 секунд (sleep 10).
Разница между этим методом и предыдущим (ключ -N), по сути, заключается в том, что в этом случае основная цель клиента ssh - не создать туннель, а выполнить команду сна в течение 10 секунд. Создание туннеля является своего рода побочным эффектом, вторичной целью. Если vncviewer не используется, клиент ssh завершит работу через 10 секунд, поскольку у него не останется больше заданий, одновременно уничтожая туннель.
Во время выполнения команды sleep, если другой процесс, в данном случае vncviewer, начинает использовать этот туннель и сохраняет его занятым после 10-секундного периода, тогда, даже если клиент ssh завершает свою удаленную работу (выполнение сна), он не может выход, потому что другой процесс занимает туннель. Другими словами, клиент ssh не может уничтожить туннель, потому что он должен был бы также убить vncviewer. Когда vncviewer прекращает использовать туннель, ssh-клиент тоже завершает работу, поскольку он уже достиг своей цели.
Таким образом, ssh-процессы не работают в фоновом режиме.
источник
vncviewer 127.0.0.1::25091
как вы используете синтаксис порта, а не синтаксис дисплея.Чтобы уничтожить туннель, используйте
ps -C ssh
илиps | grep ssh
или любой другой вариант, чтобы определить, какой процесс ssh выполняет ваш туннель. Тогда убей это.Кроме того, вы можете искать процесс, определяя, какой из них имеет этот открытый порт:
Если вы хотите уничтожить все ssh-клиенты, работающие на вашем компьютере (как ваш пользователь),
pkill ssh
сделайте это.источник
Как ответили здесь другие,
pkill ssh
убивает это.Чтобы создать туннель, который можно вернуть, я запускаю его
screen
без-f
опции, а затем отсоединяю экран с помощьюCtrl-A D
. Чтобы вернуть туннель, позвонитеscreen -r
.источник
screen
.Когда я начинаю туннель с:
-f
Запрашивает ssh перейти в фоновый режим непосредственно перед выполнением команды.-N
Не выполняйте удаленную команду. Это полезно только для переадресации портов.-D
Определяет локальную «динамическую» переадресацию портов уровня приложения.-l
Указывает пользователя для входа в систему как на удаленном компьютере.Я могу закрыть это с:
источник
Лучшее решение, которое я нашел, чтобы убить все туннели в одной командной строке, это
ps -lef|grep ssh|grep "\-L"|awk '{print $4}'|xargs kill
для сеансов SSH просто удалите параметр туннеля
ps -lef|grep ssh|awk '{print $4}'|xargs kill
источник