Autossh im Hintergrund funktioniert nicht

12

Ich habe einen Tunnel über Autossh eingerichtet.

Das funktioniert:

autossh -M 33201 -N -i myIdFile -R 33101:localhost:22 [email protected]

Ich möchte autossh im Hintergrund ausführen. Scheint einfach mit der -fOption.

Dies funktioniert jedoch nicht:

autossh -f -M 33201 -N -i myIdFile -R 33101:localhost:22 [email protected]

Autossh läuft im Hintergrund einwandfrei, aber die SSH-Verbindung scheint jedes Mal fehlzuschlagen. In / var / syslog sehe ich mehrere Vorkommen von:

autossh[3420]: ssh exited with error status 255; restarting ssh

Was mache ich falsch? Eine wilde Vermutung ist, dass es etwas mit der Authentifizierung über eine Schlüsseldatei zu tun hat. Wie kann ich das debuggen (das Hinzufügen von -v zu den ssh-Optionen scheint nirgendwo zu protokollieren).

Bearbeiten: Ich habe einige SSH-Protokolle mit der Option -y erhalten

/usr/bin/ssh[3484]: debug1: Next authentication method: publickey
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_rsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_dsa
/usr/bin/ssh[3484]: debug1: Trying private key: /home/myuser/.ssh/id_ecdsa
/usr/bin/ssh[3484]: debug1: No more authentication methods to try.
/usr/bin/ssh[3484]: fatal: Permission denied (publickey).
autossh[3469]: ssh exited with error status 255; restarting ssh

Es scheint also, dass autossh meine Identitätsdatei ( -i myIdFile) nicht akzeptiert, wenn die Option -f verwendet wird. Warum das?

(autossh 1.4c auf Raspian)

henning77
quelle
Warum überhaupt Autossh verwenden? Sie können systemd für den "Neustart bei Fehlern" verwenden. Ich habe mit meiner Lösung einen Kern erstellt: gist.github.com/guettli/…
guettli

Antworten:

29

Es scheint, als würde Autossh, wenn es in den Hintergrund fällt (Option -f), das Arbeitsverzeichnis ändern, was bedeutet, dass relative Pfade nicht mehr funktionieren. Oder genauer: Wenn Sie den absoluten Pfad Ihrer ID-Datei eingeben, werden Sie wahrscheinlich Erfolg haben.

Ich habe das Szenario neu erstellt, indem ich einen Schlüssel ohne Kennwort an einem nicht standardmäßigen Speicherort erstellt habe:

~/$ mkdir test
~/$ cd test
~/test$ ssh-keygen -f test_id_rsa

Ich drücke einfach zweimal die Eingabetaste, um einen Schlüssel zu generieren, der nicht durch ein Passwort geschützt ist.

Ich habe den neuen Schlüssel auf meinen Server kopiert (der derzeit die Kennwortauthentifizierung ermöglicht):

~/test$ ssh-copy-id -i test_id_rsa user@server

Zuerst bestätigte ich, dass der Schlüssel mit normalem SSH funktioniert, und benutzte dann Autossh wie Sie:

~/test$ ssh -i test_id_rsa user@server
~/test$ autossh -M 13000 -N -i test_id_rsa user@server
^C

Beide haben gut funktioniert, also habe ich das Problem, das Sie hatten, neu erstellt:

~/test$ autossh -f -M 13000 -N -i test_id_rsa user@server

Dies hat nicht funktioniert und Folgendes wurde geschrieben an /var/log/syslog:

autossh [2406]: ssh mit Status 255 vorzeitig beendet; autossh verlassen

Durch Ändern des Pfads der Schlüsseldatei in absolut wurde jedoch Folgendes funktioniert:

~/test$ autossh -f -M 13000 -N -i /home/user/test/test_id_rsa user@server

Keine Fehler in /var/log/syslog.

jmidgren
quelle
Super, das funktioniert.
Henning77
Du hast meinen Tag gerettet!
Arno_v
2
Die Option -N ist wichtig, da sonst "ssh mit Status 0 beendet wird; autossh beendet". Vielen Dank!
user30747
Bestätigt, ich musste auch nur den Pfad zur "id_rsa" -Datei wie folgt hinzufügen: autossh -M 19001 -fN -y -i /home/pi/.ssh/id_rsa (danke @jmidgren)
Rich
4

Ich bin mir nicht sicher, was mit dem -f los ist, aber du könntest es auch nicht tun:

nohup autossh -M 33201 -N -f -i myIdFile -R 33101:localhost:22 [email protected] &
Brian P.
quelle
nohup funktioniert bei mir auch ohne Angabe der Schlüsseldatei.
Valadil
nohuparbeitete auch für das Laufen autosshunter runitin Alpine Linux
Stuart Cardall
0

Fügen Sie SSH die folgenden Parameter hinzu, um "Sind Sie sicher, dass Sie die Verbindung fortsetzen möchten (Ja / Nein)?"

-o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

Der letzte Befehl hätte das folgende Format:

autossh -f -M $BASE_PORT -N -R $LOCAL_PORT:$LOCALHOST:$REMOTE_PORT $USER@$SERVER -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
vahid-dan
quelle
Für mich geht das.
bluebird_lboro
Aktivieren StrictHostKeyChecking=noSie diese Option nur, wenn Sie eine Verbindung zu einem bekanntermaßen kurzlebigen Spielzeug herstellen - und sich dafür entscheiden, faul zu sein.
Dolph