Як видалити перенаправлений порт 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команди, які ви виконуєте, добре вбивати. Це навряд чи хороше загальне припущення.
трійчатка

2
@Avamander я постійно підключаюся до декількох sshпримірників на декількох віддалених серверах, деякі з них без мого прямого участі. Наприклад, режим Emacs Tramp відкриває sshз'єднання за кадром, коли я відвідую віддалений буфер. Деякі користуються файловими системами користувачів, які роблять щось подібне. Це зовсім не рідкість. Насправді я вважаю, що один користувач, один sshекземпляр, є випадком використання бахроми меншості. Якщо це працює для вас, добре для вас, але загальна порада це не добре.
tripleee

19

Під час використання ssh мультиплексування вбивати процес ssh часто небажано (це вбиває всі відкриті зв’язки з цим хостом), і ви не можете легко отримати доступ до втечі, оскільки "втеча недоступна для мультиплексованих сесій". Правильний спосіб - це запустити аналог команди переадресації, яку потрібно скасувати, але додавши -O cancel. Наприклад:

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

Це відключить переадресацію цього порту, не припиняючи сеанс. Знову ж, це буде працювати лише в тому випадку, якщо для з'єднання до 192.168.1.135 використовується ssh мультиплексування .


Я так рада, що це існує, і я знайшов це, велике спасибі!
galva

2
Це найкраще рішення. Щоб вбити господаря, просто біжіть ssh -O exit 192.168.1.135.
Орієнт

Якщо ви не займаєтесь мультиплексуванням, дивіться відмінну відповідь exhuma! (Дякую a3nm за те, що я спіймав мою друкарню.)
Алан Де Смет

приголомшливий! це має бути обрана відповідь!
Труонг Нгуен

13

Як скасувати пересланий порт у вже запущеному сеансі SSH:

  1. Натисніть ~+ C(тильда + столиця C)
  2. Тип -KL port
  3. Натисніть Enter

Ви повинні побачити це:

ssh> -KL 10002
Canceled forwarding.

12

Ви можете скористатися "клавішею втечі" (як правило ~), а потім C, щоб отримати кліп до свого з'єднання. Ви можете видалити тунелі, не знімаючи з'єднання.


1
Я хотів би знати специфіку цього. Я знаю, що ви можете додати тунелі після входу в SSH, але ще не з'ясували, як його зняти.
пізніше

9
Якщо ви перебуваєте в режимі CLI, ви можете допомогти. -KL є опситом -L, -KR є опситом -R і -KD є опситом -D. Виконуючи "клавішу втечі" (~), а потім # показує ваші тунелі.
Джиммі Гедман

1
@JimmyHedman Ви можете додатково відредагувати свою відповідь, щоб додати коментар. Це робить все більш читабельним. І іноді коментарі приховуються (на випадок, якщо їх занадто багато).
ексгума

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.