Як видалити перенаправлений порт 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.