2017-02-21 1 views
0

Ich habe ein Bash-Skript mit ssh Remote-Weiterleitung, so dass ich den Computer anmelden kann, auf dem das Skript ausgeführt wird. Ich benutze ein Skript, weil das Netzwerk regelmäßig eine Art von Auth benötigt. Wenn ssh fehlschlägt, versuche ich es erneut. Das Skript ist im Grunde diese:Warum wird ssh nach einem Ausfall der Remote-Weiterleitung nicht beendet?

while [ 1 ]; do 
    authentication 
    ssh -N -v -R 9999:localhost:22 [email protected]$remote_ip 
done 

Das Problem ist, ssh wird nicht Ausfahrt auf Remote-Vorwärts-Ausfall wie unten:

debug1: Remote: Forwarding listen address "localhost" overridden by server GatewayPorts 
debug1: remote forward failure for: listen 9999, connect localhost:22 
Warning: remote port forwarding failed for listen port 9999 
debug1: All remote forwarding requests processed 

den Fehler zu dieser Ursachen zurückzuführen ist:

debug1: server_input_global_request: tcpip-forward listen localhost port 9999 
debug1: Local forwarding listening on 0.0.0.0 port 9999. 
bind: Address already in use 
channel_setup_fwd_listener: cannot listen to port: 9999 

Die Die vorherige Sitzung endet noch nicht und der Port wird verwendet.

Gibt es eine Möglichkeit zu überprüfen, ob ssh erfolgreich ist oder nicht? Und als Programmierer kann ich wirklich nicht verstehen, warum es so entworfen wurde. Was ist der Grund für dieses Design?

Antwort

0

Ihre SSH-Sitzung hat einen Timeout auf der Server-Seite, so dass, wenn Sie wieder zu verbinden versuchen, die vorherige Verbindung hört noch auf Port 9000.

Verwenden openvpn anstelle dieser hacky Lösung.

Verwandte Themen