Wie entferne ich einen über SSH weitergeleiteten Port?


52

Früher habe ich die ssh -L 10002:192.168.0.30:10002 192.168.1.135Portweiterleitung eingerichtet, jetzt muss ich sie entfernen.

Wie mache ich das?


Wir stellen oft fest, dass der Port immer noch weitergeleitet wird, wenn wir eine neue ssh-Sitzung starten, in der derselbe Befehl erneut ausgeführt wird und eine Warning: remote port forwarding failed for listen portNachricht abgerufen wird.
GabLeRoux

Antworten:


56

Wenn Sie Linux verwenden, können Sie den Prozess abbrechen, indem Sie:

ps aux | grep ssh

und dann verwenden

kill <id>

Den Prozess abbrechen.

Wenn der Befehl kill nicht erfolgreich ist, können Sie es versuchen

kill -9 <id>

31
Nein, bitte, bitte, bitte nicht verwenden, kill -9bis Sie gerade versucht haben kill. Viele Prozesse verfügen über Signal-Handler, die den Ressourcenverbrauch bereinigen, Verbindungen sauber schließen und andere Aufgaben vor dem Herunterfahren ausführen. Wenn Sie mit -9 beenden, wird der Vorgang sofort abgebrochen, ohne dass die Bereinigung durchgeführt wird. Töten ohne -9 wird die meiste Zeit arbeiten.
Doug Harris

17
kill -9ohne Grund ist wie mit einer Schrotflinte eine Mücke zu töten. :)
Darren Hall

2
Normalerweise mache ich einen Einzeiler pgrep ssh | xargs kill. Verwenden Sie nicht -9für nichts in der Tat
GabLeRoux

2
@GabLeRoux Das setzt voraus, dass Sie nur einen einzigen sshBefehl haben oder dass alle sshBefehle, die Sie ausführen, in Ordnung sind, um zu töten. Dies ist kaum eine gute allgemeine Annahme.
Tripleee

2
@Avamander Ich verbinde mich die sshganze Zeit mit mehreren Instanzen auf mehreren Remote-Servern, einige davon ohne meine direkte aktive Beteiligung. Beispielsweise öffnet der Emacs Tramp-Modus eine sshVerbindung hinter den Kulissen, wenn ich einen Remote-Puffer besuche. Einige Leute benutzen Userspace-Dateisysteme, die etwas Ähnliches tun. Es ist überhaupt nicht ungewöhnlich. In der Tat würde ich davon ausgehen, dass ein einzelner Benutzer, eine einzelne sshInstanz, ein Anwendungsfall für einen Rand der Minderheit ist. Wenn es für Sie funktioniert, ist es gut für Sie, aber es ist kein guter allgemeiner Rat.
Tripleee

18

Wenn Sie ssh-Multiplexing verwenden, ist das Beenden des ssh-Prozesses häufig unerwünscht (es beendet alle offenen Verbindungen mit diesem Host), und Sie können nicht einfach auf das Escape zugreifen, da "Escape für Multiplexing-Sitzungen nicht verfügbar". Der richtige Weg ist dann, das Analogon des Weiterleitungsbefehls auszuführen, den Sie abbrechen möchten, aber hinzuzufügen -O cancel. Zum Beispiel:

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

Dadurch wird die Portweiterleitung deaktiviert, ohne die Sitzung zu beenden. Auch dies funktioniert nur, wenn für die Verbindung zu 192.168.1.135 das ssh-Multiplexing verwendet wird .


Ich bin so froh, dass es das gibt und ich habe es gefunden, vielen Dank!
Galva

1
Dies ist die beste Lösung. Um den Meister zu töten, renne einfach ssh -O exit 192.168.1.135.
Orient

Wenn Sie keine Multiplexing-Sitzungen durchführen, lesen Sie die ausgezeichnete Antwort von exhuma! (Danke a3nm für den Tippfehler.)
Alan De Smet

genial! Das sollte die gewählte Antwort sein!
Truong Nguyen

12

Sie können die "Escape-Taste" (normalerweise ~) gefolgt von C verwenden, um einen Cli für Ihre Verbindung zu erhalten. Von dort aus können Sie Tunnel entfernen, ohne die Verbindung zu trennen.


1
Ich würde gerne die Einzelheiten dazu erfahren. Ich weiß, dass Sie Tunnel hinzufügen können , nachdem Sie SSH installiert haben, aber noch nicht herausgefunden haben, wie Sie einen Tunnel entfernen können.
Carestad

9
Wenn Sie sich im CLI-Modus befinden, können Sie helfen. -KL ist das Gegenteil von -L, -KR ist das Gegenteil von -R und -KD ist das Gegenteil von -D. Wenn Sie "Escape-Taste" (~) gefolgt von # drücken, werden Ihre Tunnel angezeigt.
Jimmy Hedman

1
@ JimmyHedman Vielleicht möchten Sie Ihre Antwort zusätzlich zum Hinzufügen eines Kommentars bearbeiten. Es macht alles lesbarer. Und manchmal werden Kommentare ausgeblendet (falls zu viele vorhanden sind).
Exhuma

11

So brechen Sie einen weitergeleiteten Port in einer bereits laufenden SSH-Sitzung ab:

  1. Drücken Sie ~+ C(Tilde + Hauptstadt C)
  2. Art -KL port
  3. Drücken Sie Enter

Das solltest du sehen:

ssh> -KL 10002
Canceled forwarding.

5

Sie können eine interaktive Konsole durch Eingabe von ~C(Großbuchstabe "C") aufrufen . Auf diese Weise können Sie (unter anderem) dynamisch Portweiterleitungen hinzufügen und entfernen.

Diese Reihenfolge muss unmittelbar nach einem Wagenrücklauf / Zeilenumbruch erfolgen. Geben Sie im Zweifelsfall einfach Enter~C(nacheinander) ein.

Wenn Sie die Zeichen nicht auf der Konsole sehen, machen Sie es richtig :)

Sie sollten jetzt eine ssh>Eingabeaufforderung sehen.

Um den Port zu entfernen, geben Sie einfach -KL 10002gefolgt von ein Enter(wo 10002ist Ihr weitergeleiteter Port).

Das Inverse - Hinzufügen eines neuen Forward - kann folgendermaßen erfolgen (von Anfang bis Ende):

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter


Dies ist die richtige Antwort, wenn Sie keine Verbindungen multiplexen. Wenn Sie sind, werden Sie mit auf die Beine gestellt ~C escape not available to multiplexed sessions. Wenn dies der Fall ist, lesen Sie die ausgezeichnete Antwort von a3nm.
Alan De Smet
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.