
Ich habe einen Remote-Rechner hinter einer Firewall, mit dem ich mich per SSH verbinden möchte. Soweit ich weiß, kann dies durch die Verwendung eines Reverse-SSH-Tunnels erreicht werden.
Der Befehl, den ich verwende, ist
ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa.pub [email protected]
Mein Hauptproblem besteht darin, dass ich diesen Befehl bei jedem Start des Computers ausführen möchte, sodass der Computer nach einem Neustart erreichbar ist.
Ich habe versucht, cron zu verwenden, indem ich den Befehl sowohl in die crontab meines Benutzers als auch in eingefügt habe /etc/cron
. Das Problem ist jedoch, dass für beide Befehle ein Passwort abgefragt wird. Ich habe the id_rsa.pub
eine Datei erstellt und sie an den Remote-Server gesendet, aber es scheint trotzdem nicht zu funktionieren.
Wenn ich angemeldet bin (z. B. über Teamviewer), kann ich den Befehl ausführen und es wird kein Passwort abgefragt. Wenn ich den Befehl als root ausführe ( sudo
), wird das (leere) Passwort für die rsa-Datei abgefragt. Ich vermute, dass mein Problem hier liegt, d. h. wenn cron den Befehl ausführt, fragt ssh nach dem Passwort und der Befehl hängt sich auf.
Ich habe versucht, sowohl die RSA-Datei meines Benutzers als auch die RSA-Datei des Root-Benutzers zu verwenden, und mit keiner von beiden kann ich eine Verbindung herstellen.
Antwort1
Fügen Sie vor Ihrem SSH-Befehl einfach „sleep 60;“ hinzu:
@reboot sleep 60;ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]
Nach dem Neustart ist Ihr Netzwerk immer noch ausgefallen.
Antwort2
Nachdem ich mehrere Quellen kombiniert hatte, erstellte ich einen Dienst zum automatischen Starten des Reverse-SSH-Kanals. Die Konfigurationsdateien und die erforderlichen Schritte finden Sie in diesem Repository
Antwort3
Eine bessere Lösung könnte seinautossh:
„autossh ist ein Programm zum Starten und Überwachen einer Kopie von SSH. Bei Bedarf wird es neu gestartet, wenn es abstürzt oder keinen Datenverkehr mehr durchlässt.“
Wie das Zitat besagt, hat dies den zusätzlichen Vorteil, dass die Funktion „Always On“ bereitgestellt wird.
Antwort4
Behebung des SSH-Problems
Sie können den Remote-Computer nicht authentifizieren mitöffentlichSchlüssel, müssen Sie verwendenPrivatSchlüssel, um das zu tun. Der öffentliche Schlüssel muss auf dem Remote-Server sein. Wenn Sie nicht sicher sind, kopieren Sie den öffentlichen Schlüssel einfach wie folgt auf den Remote-Server:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@remoteserver
und führen Sie dann Ihren Befehl mit dem privaten Schlüssel aus:
ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]
Ausführen dieses Befehls beim Systemstart
Da Sie bereits mit crontab gearbeitet haben, führen Sie crontab -e
die Bearbeitung Ihres Crons aus. Fügen Sie die folgende Zeile hinzu, um diesen Befehl auszuführen, sobald Ihr Computer hochfährt.
@reboot ssh -N -f -R 0.0.0.0:1234:localhost:22 -i /home/username/.ssh/id_rsa [email protected]