Ich bin ziemlich verloren. Von der Manpage:
-f Requests ssh to go to background just before command execution.
Nachdem -f
ich SSH mit der Option gestartet habe, habe ich einen funktionierenden Tunnel. Aber nachdem ich damit fertig bin, weiß ich nicht, wie ich weiter damit umgehen soll. Zum Beispiel kann ich den SSH-Tunnel nicht schließen, wenn ich damit fertig bin.
Die üblichen Methoden, die ich kenne, funktionieren nicht. Gibt beispielsweise jobs
nichts zurück. Der ~
Befehl wird nicht erkannt (und ich weiß sowieso nicht genau, wie ich ihn verwenden soll).
Allerdings pgrep
sagt mir, dass der SSH-Tunnel noch läuft (nachdem ich das Terminal geschlossen habe, etc.). Wie interagiere ich damit? Wie schließe ich es?
quelle
/tmp/session1
(obwohl empfohlen wird, es mit % -Mustern zu benennen - siehe Beschreibung von ControlPath inman ssh_config
)ssh -S <path-to-socket> -O exit <server>
Befehls eine beliebige Zeichenfolge sein kann, sie muss jedoch vorhanden sein. Das ist irgendwie ungeschickt.Ich habe die Lösung hier gefunden: http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/
Der beste Weg - Tunnel, die sich automatisch schließen
Wie bereits erwähnt, können wir anstelle der Schalterkombination -f -N nur -f verwenden, aber auch einen Befehl auf dem Remote-Computer ausführen. Aber welcher Befehl sollte ausgeführt werden, da wir nur einen Tunnel initialisieren müssen?
Dies ist, wenn Schlaf der nützlichste Befehl von allen sein kann! In dieser besonderen Situation hat der Schlaf zwei Vorteile:
Wie diese beim automatischen Schließen des SSH-Tunnels helfen, wird unten erläutert.
Wir starten die ssh-Sitzung im Hintergrund und führen den Befehl sleep 10 Sekunden lang auf dem Remote-Computer aus. Die Anzahl der Sekunden ist nicht entscheidend. Gleichzeitig führen wir vncviewer genauso aus wie zuvor:
In diesem Fall wird der ssh-Client angewiesen, die ssh-Sitzung in den Hintergrund zu stellen (-f), den Tunnel zu erstellen (-L 25901: 127.0.0.1: 5901) und den Befehl sleep auf dem Remote-Server 10 Sekunden lang auszuführen (sleep) 10).
Der Unterschied zwischen dieser Methode und der vorherigen (-N switch) besteht im Grunde darin, dass in diesem Fall das primäre Ziel des ssh-Clients nicht darin besteht, den Tunnel zu erstellen, sondern den Befehl sleep 10 Sekunden lang auszuführen. Die Schaffung des Tunnels ist eine Art Nebenwirkung, ein sekundäres Ziel. Wenn vncviewer nicht verwendet würde, würde der ssh-Client nach 10 Sekunden beendet, da er keine weiteren Jobs mehr zu erledigen hätte und gleichzeitig den Tunnel zerstören würde.
Wenn während der Ausführung des Befehls sleep ein anderer Prozess, in diesem Fall vncviewer, diesen Tunnel verwendet und ihn über den Zeitraum von 10 Sekunden hinaus belegt hält, kann er dies nicht tun, selbst wenn der ssh-Client seinen Remote-Job beendet (Ausführung von sleep) beenden, da ein anderer Prozess den Tunnel belegt. Mit anderen Worten, der ssh-Client kann den Tunnel nicht zerstören, da er auch vncviewer töten müsste. Wenn vncviewer den Tunnel nicht mehr verwendet, wird auch der ssh-Client beendet, da er sein Ziel bereits erreicht hat.
Auf diese Weise werden keine ssh-Prozesse im Hintergrund ausgeführt.
quelle
vncviewer 127.0.0.1::25091
wie Sie die Port-Syntax und nicht die Display-Syntax verwenden.Um den Tunnel zu beenden, verwenden Sie
ps -C ssh
oderps | grep ssh
eine andere Variante, um festzustellen, welcher SSH-Prozess Ihren Tunnel ausführt. Dann töte es.Alternativ können Sie nach dem Prozess suchen, indem Sie ermitteln, an welchem dieser Port geöffnet ist:
Wenn Sie alle auf Ihrem Computer (als Benutzer) ausgeführten ssh-Clients beenden möchten,
pkill ssh
wird dies ausgeführt.quelle
Wie von anderen hier geantwortet,
pkill ssh
tötet es.Um einen Tunnel zu erstellen, der zurückgebracht werden kann, starte ich ihn
screen
ohne die-f
Option und entferne dann den Bildschirm mitCtrl-A D
. Um den Tunnel zurückzubringen, rufen Sie anscreen -r
.quelle
screen
.Wenn ich einen Tunnel starte mit:
-f
Fordert ssh auf, kurz vor der Befehlsausführung in den Hintergrund zu wechseln.-N
Führen Sie keinen Remote-Befehl aus. Dies ist nützlich, um nur Ports weiterzuleiten.-D
Gibt eine lokale "dynamische" Portweiterleitung auf Anwendungsebene an.-l
Gibt den Benutzer an, der sich auf dem Remotecomputer anmelden soll.Ich kann es mit schließen:
quelle
Die beste Lösung, die ich gefunden habe, um alle Tunnel in einer Befehlszeile zu töten , ist
ps -lef|grep ssh|grep "\-L"|awk '{print $4}'|xargs kill
Entfernen Sie für die SSH-Sitzungen einfach die Tunneloption
ps -lef|grep ssh|awk '{print $4}'|xargs kill
quelle