Ich habe einen PC hinter einem NAT, der eine umgekehrte SSH-Verbindung zu meiner Digitalocean VPC herstellt. Ich verwende diese umgekehrte SSH-Verbindung von zu Hause aus, um mich bei meinem Büro-PC anzumelden (ich bin dazu berechtigt), Dateien zu kopieren und andere wichtige Dinge zu tun.
Obwohl nicht oft, bemerkte ich, dass mein Büro-PC neu startet (aufgrund von Stromausfällen usw.) und die umgekehrte SSH-Verbindung, die er mit meiner VPC hergestellt hat, unterbricht. In solchen Fällen kann ich keine Verbindung von meinem Heim-PC zu meinem Büro-PC herstellen.
Ich führe das folgende Skript aus, um die umgekehrte Verbindung + den dynamischen Proxy herzustellen, um meinen auf dem Büro-PC generierten Datenverkehr (da ich keine Browserinformationen freigeben muss) zu anonymisieren.
autossh -CD 8080 -i digitalOcean -R 8081:localhost:22 root@IPofDigitalOceanPC
Es gibt keine Möglichkeit, dieses Skript nach einem Neustart erneut auf meinem Büro-PC auszuführen, da ich physisch nicht da bin. Um dieses Problem zu lösen, habe ich die folgende Crontab installiert.
Hinweis: Die rev.sh
Datei enthält die obige Zeile. Das Zertifikat "digitalOcean" und rev.sh befindet sich in Ubuntu home
. Wenn ich ./rev.sh
in meinem Ubuntu-Terminal ausführe, erhalte ich daher einen dynamischen Proxy und Zugriff auf den ym DigitalOcean-Server. Diese Methode funktioniert zu 100%.
Wenn ich die chrontab jedoch in der folgenden Methode installiere, erstellt mein Ubuntu-PC niemals einen dynamischen Proxy. Ich kann dies sehen, weil beim Überprüfen dieses Proxys in Google Chrome angezeigt wird, dass der Proxy die Verbindung verweigert.
Hier sind die Cronejobs, die ich als Roots-Cronejobs ausprobiert habe. Ich habe diese auch als normaler Benutzer ausprobiert, aber sie haben immer noch nicht funktioniert.
@reboot bash /home/user/rev.sh
@reboot /home/user/rev.sh
@reboot cd /home/user && ./rev.sh
Ich habe dann einige Minuten vor der aktuellen Zeit eine Chrontab installiert und darauf gewartet, dass sie ausgeführt wird.
24 12 8 * * * bash /home/user/rev.sh
24 12 8 * * * /home/user/rev.sh
diese wurden auch nicht ausgeführt.
Bitte seien Sie so freundlich, mir zu helfen, meinen Fehler zu erkennen. Es gibt viele ähnliche Fragen auf dieser Website zu meinem Problem. Ich habe daher viele Antworten gegeben, aber keine davon schien zu helfen.
quelle
/var/log/cron*
. Zu Testzwecken können Sie einfach so etwas schreiben*/2 * * * * /path/to/script
- es wird alle 2 Minuten ein Skript ausgeführt. Suchen Sie auch nach E-Mails für Benutzer, die cron ausführen. Ist es Wurzel? Verwendenmail
Befehl. Oh, ich kann sehen, dass Sie den SSH-Schlüssel verwenden? Ich bezweifle, dass Cron Job es finden kann, wenn Sie nach dem-i
Wechsel keinen vollständigen Pfad dazu angeben.Antworten:
Ich bin mir nicht sicher, ob
cron
es eine gute Idee ist, ein Skript beim Start auszuführen. Eine Alternative, die ich für geeigneter halte, ist das Erstellen eines SystemD-Dienstes, wie hier beschrieben . Erstellen Sie eine Datei mit dem Namen/etc/systemd/system/autossh.service
:Führen Sie dann den folgenden Befehl als root aus:
quelle
Ein paar Dinge, die Sie ausprobieren können:
Manchmal ist Ihr Pfad beim Booten oder durch Cronjobs nicht vollständig festgelegt. Ersetzen Sie daher autossh auf meinem System durch den vollständigen Pfad
Das @ reboot-Motiv hängt von der Startzeit des Cron-Daemons ab. Daher kann es aufgerufen werden, bevor andere Subsysteme (Netzwerk?) ausgeführt werden
Und Ihr Crontab-Beispiel:
wird nur am 8. eines jeden Monats aufgerufen. Und es hat ein zusätzliches Feld. Versuchen
quelle
/usr/bin
ist immer in der StandardeinstellungPATH
, auch fürcron
Es scheint so zu sein, dass das Skript, wenn es über crontab ausgeführt wird, Ihr Zertifikat nicht finden kann.
Wenn Sie als Benutzer das Skript ausführen, wird das Zertifikat von /home/ubuntu-user/.ssh / ... verwendet. Wenn das Skript jedoch von crontab ausgeführt wird, wird es als root ausgeführt. root übernimmt die Zertifikate von /root/.ssh
Sie haben also mehrere Möglichkeiten, damit es funktioniert, aber ich denke, dass das Ausführen des Skripts als Ubuntu-Benutzer in crontab dies tut.
Bearbeiten:
Stellen Sie sicher, dass Sie einen vollständig qualifizierten Pfad für das Zertifikat angeben
quelle
Versuchen Sie es mit
su
:Wird es bei Ihrem Problem helfen?
quelle
Da die Frage nicht so viele Daten enthält, beginne ich bei Null mit dem, was ich tun würde
Ich würde alle Konfigurationen in / etc / ssh / ssh_config ablegen:
Ich würde den Schlüssel einstecken
/etc/ssh/mytunnel_key
dann würde ich es mit einem Cron-Eintrag versuchen (ein Upstart / Systemd-Dienst wäre besser) wie folgt:
quelle
Sie müssen -f verwenden und einen Befehl ausführen, wenn Sie ohne Terminal ausgeführt werden. Hier ist ein Beispiel:
-f platziert es im Hintergrund, aber wenn Sie es im Hintergrund platzieren, bedeutet dies, dass ssh eine Verbindung herstellt und die Verbindung trennt, sobald die Aufgabe abgeschlossen ist. Du brauchst also eine Aufgabe.
sleep 31536000 weist ssh an, nach dem Herstellen der Verbindung 1 Jahr lang "sleep" auszuführen. Während dieser Zeit bleiben Ihre Tunnel geöffnet.
Wenn Sie keinen Befehl ausführen, stellt ssh eine Verbindung her, richtet den Reverse-Tunnel an Port 2205 ein und wird beendet, wenn dies erledigt ist. Wenn die Verbindung mit autossh fehlschlägt, wird die Verbindung wiederhergestellt und der Ruhezustand erneut gestartet. Selbst mit einer wirklich stabilen Internetverbindung bezweifle ich, dass ein Jahr möglich ist.
Übrigens - im Gegensatz zu diesen anderen Jokern weiß ich, dass dies funktioniert, da ich es tatsächlich getestet habe, weil ich natürlich etwas Ähnliches mache und da es jetzt sehr zuverlässig funktioniert, kann ich Ihnen die richtige Antwort geben.
-f und "Befehl"
Das fehlt dir.
quelle