Jak usunąć port przekierowany SSH

52

Kiedyś ssh -L 10002:192.168.0.30:10002 192.168.1.135ustanawiałem przekierowanie portów, ale teraz muszę go usunąć.

Jak mam to zrobic?

użytkownik16654
źródło
Często zdajemy sobie sprawę, że port jest nadal przekazywany, gdy uruchamiamy nową sesję ssh, uruchamiając ponownie to samo polecenie i otrzymując Warning: remote port forwarding failed for listen portkomunikat.
GabLeRoux

Odpowiedzi:

56

Jeśli używasz Linuksa, możesz zabić proces poprzez:

ps aux | grep ssh

a następnie użyj

kill <id>

Aby zabić proces.

Jeśli polecenie zabicia nie powiedzie się, możesz spróbować

kill -9 <id>
zpon
źródło
31
Nie. Nie. Proszę, nie używaj, kill -9dopóki nie spróbujesz kill. Wiele procesów będzie miało procedury obsługi sygnałów, które oczyszczą ich wykorzystanie zasobów, wyczyszczą połączenia i wykonają inne zadania przed zamknięciem. Jeśli zabijesz za pomocą -9, proces umiera natychmiast, bez czyszczenia. Zabijanie bez -9 będzie działać przez większość czasu.
Doug Harris
17
kill -9bez powodu przypomina strzelanie do komara. :)
Darren Hall,
2
Zwykle robię jedną wkładkę pgrep ssh | xargs kill. Nie używaj -9za darmo
GabLeRoux
2
@GabLeRoux Zakłada się, że masz tylko jedno sshpolecenie lub że wszystkie uruchomione sshpolecenia są w porządku do zabicia. To nie jest dobre ogólne założenie.
tripleee
2
@Avamander Łączę się z wieloma sshinstancjami na wielu zdalnych serwerach przez cały czas, niektóre z nich bez mojego bezpośredniego aktywnego udziału. Na przykład tryb Trac Emacsa otwiera sshpołączenie za kulisami, gdy odwiedzam zdalny bufor. Niektóre osoby używają systemów plików przestrzeni użytkownika, które robią coś podobnego. To wcale nie jest rzadkie. W rzeczywistości zakładałbym, że pojedynczy użytkownik, pojedyncza sshinstancja jest przypadkiem marginalnym. Jeśli to dla ciebie działa, to dobrze dla ciebie, ale nie jest to dobra ogólna rada.
tripleee
19

Podczas korzystania z multipleksowania ssh zabicie procesu ssh jest często niepożądane (zabija wszystkie otwarte połączenia z tym hostem) i nie można łatwo uzyskać dostępu do escape, ponieważ „escape niedostępny dla sesji multipleksowanych”. Właściwy sposób to uruchomienie analogu polecenia przekazywania, które chcesz anulować, ale dodając -O cancel. Na przykład:

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

Spowoduje to wyłączenie przekierowania portów bez przerywania sesji. Ponownie zadziała to tylko wtedy, gdy do połączenia z 192.168.1.135 jest używane multipleksowanie ssh .

a3nm
źródło
Cieszę się, że to istnieje i znalazłem to, wielkie dzięki!
galva
2
To najlepsze rozwiązanie. Aby zabić mistrza, po prostu biegnij ssh -O exit 192.168.1.135.
Orient
Jeśli nie multipleksowanie sesji, patrz doskonałą odpowiedź exhuma głównej! (Dzięki a3nm za złapanie mojej literówki.)
Alan De Smet
niesamowite! to powinna być wybrana odpowiedź!
Truong Nguyen,
13

Jak anulować przekierowany port w już uruchomionej sesji SSH:

  1. Naciśnij ~+ C(tylda + duże C)
  2. Rodzaj -KL port
  3. naciśnij enter

Powinieneś to zobaczyć:

ssh> -KL 10002
Canceled forwarding.
kambunkcyjny
źródło
12

Możesz użyć „klawisza Escape” (zwykle ~), a następnie C, aby uzyskać cli do połączenia. Możesz stamtąd usunąć tunele bez zrywania połączenia.

Jimmy Hedman
źródło
1
Chciałbym poznać szczegóły tego. Wiem, że możesz dodawać tunele po SSH, ale jeszcze nie wiem, jak je usunąć.
carestad
9
Gdy jesteś w trybie CLI, możesz pomóc. -KL jest przeciwieństwem -L, -KR jest przeciwieństwem -R, a -KD jest przeciwieństwem -D. Wykonanie „klawisza Escape” (~), a następnie # pokazuje tunele.
Jimmy Hedman
1
@ JimmyHedman możesz dodatkowo edytować swoją odpowiedź, dodając komentarz. Sprawia, że ​​wszystko jest bardziej czytelne. A czasem komentarze są ukryte (na wypadek, gdyby było ich zbyt wiele).
ekshuma
7

Możesz wejść do interaktywnej konsoli, wpisując ~C(wielkie „C”). Pozwala to dynamicznie dodawać i usuwać przekierowania portów (między innymi).

Ta sekwencja musi przyjść zaraz po powrocie karetki / nowej linii. W razie wątpliwości wystarczy wpisać Enter~C(w sekwencji).

Jeśli nie widzisz postaci pojawiających się na konsoli, robisz to dobrze :)

Powinieneś teraz zobaczyć ssh>monit.

Aby usunąć port, po prostu wpisz, -KL 10002a następnie Enter(gdzie 10002jest Twój przekierowany port).

Odwrotność - dodawanie nowego do przodu - można wykonać w następujący sposób (od początku do końca):

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter

ekshuma
źródło
To dobra odpowiedź, jeśli nie multipleksujesz połączeń. Jeśli tak, zostaniesz odbity ~C escape not available to multiplexed sessions. W takim przypadku zobacz doskonałą odpowiedź a3nm.
Alan De Smet