
Ich möchte einen Befehl ausführen, der für seinen Betrieb einen SSH-Tunnel benötigt (mehrmaliges Öffnen von TCP-Verbindungen). Nachdem der Tunnel existiert, muss er wieder geschlossen werden. Die Probleme, auf die ich gestoßen bin, sind:
Ich kann den Befehl sofort im Hintergrund ausführen, habe dann aber keine zuverlässige Möglichkeit, sicherzugehen, dass der Tunnel eingerichtet wurde:
#!/bin/bash set -e ssh -N -L lport:server:port host & trap "kill $!" EXIT sleep 1 my program that connects to localhost:lport
Es kommt häufig vor, dass das Öffnen des Tunnels länger als 1 Sekunde dauert. Ich könnte auch mehr Zeit einplanen, aber dann ist das Benutzererlebnis nicht besonders gut und es ist immer noch unzuverlässig.
Ich kann SSH in den Hintergrund laufen lassen, wenn die Verbindung geöffnet wird, aber ich finde keine zuverlässige Möglichkeit, es anschließend zu beenden, weil ich die PID des SSH-Hintergrundprozesses nicht kenne:
#!/bin/bash set -e ssh -f -N -L lport:server:port host # I'd set up a trap ??? EXIT, but for what? my program that connects to localhost:lport
Gibt es eine Möglichkeit, die PID des SSH-Prozesses zu erkennen?
Oder gibt es eine andere, bessere Möglichkeit die Aufgabe zu lösen?
Antwort1
Sehenhttps://stackoverflow.com/questions/2241063/bash-script-to-setup-a-temporary-ssh-tunnelfür Antworten, die Control Socket und ExitOnForwardFailure enthalten.