Как мне удалить переадресованный порт SSH


52

Раньше я ssh -L 10002:192.168.0.30:10002 192.168.1.135устанавливал переадресацию портов, но теперь мне нужно его удалить.

Как мне это сделать?


Мы часто понимаем, что порт все еще пересылается, когда запускаем новый сеанс ssh, снова выполняя ту же команду и получая Warning: remote port forwarding failed for listen portсообщение.
GabLeRoux

Ответы:


56

Если вы используете Linux, вы можете убить процесс:

ps aux | grep ssh

а затем использовать

kill <id>

Чтобы убить процесс.

Если команда kill не удалась, вы можете попробовать

kill -9 <id>

31
Нет. Нет. Пожалуйста, пожалуйста, пожалуйста, не используйте, kill -9пока не попробуете kill. Многие процессы будут иметь обработчики сигналов, которые очистят их использование ресурсов, аккуратно закроют соединения и другие задачи перед завершением работы. Если вы убьете с -9, процесс немедленно прекратит свою работу без очистки. Убийство без -9 будет работать большую часть времени.
Даг Харрис

17
kill -9без причины все равно что использовать дробовик, чтобы убить комара. :)
Даррен Холл

2
Я обычно делаю один лайнер pgrep ssh | xargs kill. Не используйте -9ничего на самом деле
GabLeRoux

2
@GabLeRoux Это предполагает, что у вас есть только одна sshкоманда, или что все sshкоманды, которые вы выполняете, могут быть уничтожены. Это вряд ли хорошее общее предположение.
tripleee

2
@Avamander Я постоянно подключаюсь к нескольким sshэкземплярам на нескольких удаленных серверах, некоторые из которых без моего непосредственного активного участия. Например, режим Emacs Tramp открывает sshсоединение за кулисами, когда я посещаю удаленный буфер. Некоторые люди используют пользовательские файловые системы, которые делают нечто подобное. Это совсем не редкость. На самом деле, я бы предположил, что один пользователь, один sshэкземпляр - это дополнительный случай меньшинства. Если это работает для вас, хорошо для вас, но это не очень хороший общий совет.
tripleee

20

При использовании мультиплексирования ssh уничтожение процесса ssh часто нежелательно (оно убивает все открытые соединения с этим хостом), и вы не можете легко получить доступ к escape, потому что «escape недоступно для мультиплексированных сеансов». Правильный путь - запустить аналог команды переадресации, которую вы хотите отменить, но добавить -O cancel. Например:

ssh -O cancel -L 10002:192.168.0.30:10002 192.168.1.135

Это отключит переадресацию этого порта без завершения сеанса. Опять же, это будет работать только в том случае, если для соединения с 192.168.1.135 используется мультиплексирование ssh .


Я так рад, что это существует, и я нашел это, большое спасибо!
гальва

2
Это лучшее решение. Чтобы убить хозяина, просто беги ssh -O exit 192.168.1.135.
Ориент

Если вы не используете мультиплексные сеансы, посмотрите превосходный ответ exhuma! (Спасибо a3nm за то, что поймали мою опечатку.)
Алан Де Смет

классно! это должен быть выбранный ответ!
Чыонг Нгуен

13

Как отменить переадресованный порт в уже запущенном сеансе SSH:

  1. Нажмите ~+ C(тильда + заглавная C)
  2. Тип -KL port
  3. нажмите Ввод

Вы должны увидеть это:

ssh> -KL 10002
Canceled forwarding.

12

Вы можете использовать "escape-ключ" (обычно ~), а затем C, чтобы получить cli для вашего соединения. Оттуда вы можете удалить туннели, не разрывая соединение.


1
Я хотел бы знать специфику этого. Я знаю, что вы можете добавить туннели после того, как войдете в SSH, но еще не выяснили, как их убрать.
Carestad

9
Когда вы находитесь в режиме CLI, вы можете помочь. -KL является противоположностью -L, -KR является противоположностью -R, а -KD является противоположностью -D. Выполнение «escape-ключа» (~), за которым следует #, показывает ваши туннели.
Джимми Хедман

1
@JimmyHedman Вы можете отредактировать свой ответ дополнительно к добавлению комментария. Это делает все более читабельным. И иногда комментарии скрыты (если их слишком много).
exhuma

7

Вы можете войти в интерактивную консоль, набрав ~C(заглавная "C"). Это позволяет динамически добавлять и удалять переадресацию портов (среди прочего).

Эта последовательность должна появиться сразу после возврата каретки / перевода строки. Так что в сомнении, просто введите Enter~C(по порядку).

Если вы не видите символы, появляющиеся на консоли, вы делаете это правильно :)

Теперь вы должны увидеть ssh>подсказку.

Чтобы удалить порт, просто введите, -KL 10002а затем Enter(где 10002находится ваш перенаправленный порт).

Обратное - добавление нового форварда - можно сделать так (от начала до конца):

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter


Это правильный ответ, если вы не используете мультиплексные соединения. Если вы, вы будете отскочил с ~C escape not available to multiplexed sessions. Если это так, см. Отличный ответ a3nm.
Алан Де Смет
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.