Starten Sie SSH automatisch beim Booten

15

Völlig neu in Linux und Ubnuntu. Einrichten einer Maschine für Deep Learning / Neuronale Netze. Bisher läuft es gut. Habe alles installiert und läuft. Ich möchte in der Lage sein, von meinem Mac-Laptop aus zu sshen, um das System zu verwenden. Ich habe openssh installiert und das funktioniert.

Beim Neustart des Computers wird der SSH-Server jedoch nicht neu gestartet. Ich überprüfe mit sudo service ssh statusund es meldet und Fehler. Ich kann es dann starten und alles funktioniert gut.

Mein erster Gedanke war, dass ich sagen muss, dass es beim Neustart gestartet werden soll, und ich habe diesen Thread gefunden, der besagt, dass es standardmäßig gestartet werden soll und ich kein Chrontab oder ähnliches hinzufügen muss. Ich glaube also nicht, dass es das ist.

Dann habe ich diesen Thread gefunden, der die Verwendung des Befehls vorschlägt sudo update-rc.d ssh defaults, aber dieser Thread ist ziemlich alt und es scheint, dass die Antwort vielleicht schon damals nicht richtig war?

Also dann fand ich diesen Thread , der die empfehlen , auszukommen ListenAddressZeile in der sshd_config - Datei. Grundsätzlich heißt es, dass bei Verwendung der ListenAddress möglicherweise versucht wird, die IP-Adresse abzurufen, bevor sie vom DCHP zugewiesen wurde, sodass der Start fehlschlägt. Welches macht Sinn. Aber ich brauche diesen Parameter, damit meine Portweiterleitung über mein Heimnetzwerk funktioniert.

Diese Dokumentation unter dem Eintrag für ListenAddress besagt das

The default is to listen on all local addresses.

Vielleicht brauche ich es nicht, damit die Portweiterleitung funktioniert?

Ich bin dem vorherigen Thread zu diesem Fehlerbericht gefolgt, der ebenfalls ziemlich alt ist, aber vorschlägt, den Netzwerkmanager zu verwenden, um ssh jedes Mal neu zu starten, wenn der Netzwerkmanager eine neue IP erhält.

echo /etc/init.d/ssh restart > /etc/NetworkManager/dispatcher.d/10ssh
chmod 755 /etc/NetworkManager/dispatcher.d/10ssh

Das ist viel mehr, als dieser Noobie an dieser Stelle beurteilen kann. Ist das sicher Ist das der Weg dies zu tun? Wurde in den letzten 7 Jahren etwas anderes erarbeitet?

Jeder Rat wäre toll. Vielen Dank.

Rothrock
quelle
Gee, ich habe einfach das openssh-server Paket installiert und es richtig konfiguriert. Mein SSH-Server wurde seitdem jedes Mal automatisch ordnungsgemäß gestartet. Es ist überhaupt kein zusätzliches Fummeln erforderlich.
user535733
1
Verwenden Sie die Portweiterleitung und mussten Sie den Parameter ListenAddress nicht verwenden? Wenn ja, können Sie mitteilen, was "richtig konfiguriert" beinhaltet?
Rothrock
Aus diesem Grund haben Sie beim ersten Start keine Informationen zum Status von SSH angegeben. Was wird systemctl status sshausgegeben?
muru
Ihr Problem klingt ähnlich wie dieses (anscheinend ungelöste) SSH Daemon startet nicht normal - können Sie bitte Ihre Frage so bearbeiten , dass sie die Ausgabe vonsystemctl status NetworkManager-wait-online.service
steeldriver 13.03.17
1
Wie haben Sie Ihre Portweiterleitung eingerichtet? Ich benutze die ListenAddress überhaupt nicht und die Dinge funktionieren gut auf meinem Heimserver. Mein Router leitet alles, was an einem von mir festgelegten Port ankommt (22, wenn Sie den Standardport möchten, aber Sie können alles verwenden, solange es nicht mit anderen Diensten in Ihrem internationalen Netzwerk in Konflikt steht), an den gewünschten Computer weiter. Beispielsweise wird alles, was an Port 12345 eingeht, an Port 22 auf meinem CentOS-Server weitergeleitet. Alles, was bei 12346 ankommt, wird an Port 22 meines kopflosen RasPi weitergeleitet. Alles, was über 12347 eingeht, wird für den IRC-Bouncer auf meinem RasPi an Port 6697 gesendet.
RobertRSeattle

Antworten:

43

Hast du gerade versucht einfach einzustellen

sudo systemctl enable ssh

?

So habe ich mein ssh so eingestellt, dass es beim Start läuft.

**** Ich gehe in den obigen Teil der Antwort, falls es für andere hilfreich ist, die auf diesen Beitrag stoßen ****

Zitiere meinen Kommentar von oben:

Wie haben Sie Ihre Portweiterleitung eingerichtet? Ich benutze die ListenAddress überhaupt nicht und die Dinge funktionieren gut auf meinem Heimserver. Mein Router leitet alles, was an einem von mir festgelegten Port ankommt (22, wenn Sie den Standardport möchten, aber Sie können alles verwenden, solange es nicht mit anderen Diensten in Ihrem internationalen Netzwerk in Konflikt steht), an den gewünschten Computer weiter. Beispielsweise wird alles, was an Port 12345 eingeht, an Port 22 auf meinem CentOS-Server weitergeleitet. Alles, was bei 12346 ankommt, wird an Port 22 meines kopflosen RasPi weitergeleitet. Alles, was über 12347 eingeht, wird für den IRC-Bouncer auf meinem RasPi an Port 6697 gesendet

Die ListenAddress hat nichts mit Port-Forwading zu tun. Die ListenAdress kann für einen Server verwendet werden, der mit mehreren IP-Adressen über eine oder mehrere NICs konfiguriert ist. Zitieren von hier (die ganze Seite ist eine gute Erklärung): https://www.cyberciti.biz/tips/howto-openssh-sshd-listen-multiple-ip-address.html

Angenommen, Sie haben insgesamt 8 öffentliche IP-Adressen und eine private IP-Adresse. Sie möchten sshd nur an eine ausgewählte öffentliche IP (ex 70.5.xx.xx) und an eine private IP (10.1.5.1) binden.

Glücklicherweise gibt es eine einfache Möglichkeit, dies mithilfe der ListenAddress-Option zu erreichen. Es gibt die lokalen Adressen an, die sshd abhören soll. Wenn diese Anweisung aus der Konfigurationsdatei übersprungen wird, bindet oder listet sshd alle verfügbaren IP-Adressen auf.

Damit können einige Ihrer mehreren IP-Adressen SSH-Verbindungen akzeptieren. Ich vermute, Sie haben die ListenAddress entweder auf Ihre öffentliche IP-Adresse oder auf die interne IP-Adresse Ihres Routers eingestellt. Wenn Sie die lokale IP-Adresse Ihres Servers eingestellt hätten, hätte dies problemlos funktioniert. Unabhängig davon wissen Sie jetzt, wie ListenAddress funktioniert, und sind bereit, wenn Sie einen komplizierteren Server konfigurieren müssen. Ich bin froh zu hören, dass du Dinge zum Laufen gebracht hast.

RobertRSeattle
quelle
2
+1 Dies ist die richtige Antwort. Ubuntu 16.04 verwendet nun systemd. Der Befehl in dieser Antwort verwendet systemd, um SSH beim Neustart zu starten. Die anderen Threads, mit denen das OP verknüpft ist, betrafen nur den Start und nicht das System oder betrafen überhaupt nicht das Problem.
Sam Gleske
1
Ich habe systemctl list-unit-files –type = service ausgeführt und sehe, dass ssh.service aktiviert ist. Ich denke also nicht, dass das das Problem ist. Aber danke für den Tipp zu systemctl / systemd. Das gibt mir mehr Orte zum Schauen. Gibt es eine Möglichkeit, systemd / systemctl anzuweisen, zu warten, bis der DHCP-Server die IP-Adresse zurückgibt?
Rothrock
Nach der Aktivierung sollte eine neue Datei erstellt werden. Überprüfen Sie dies mitls -l /etc/systemd/system/sshd.service
Timo
2

Da die vorgeschlagene Lösung für mich nicht funktionierte, stellte ich schließlich fest, dass ein zusätzlicher Befehl erforderlich ist, um SSH beim Booten zu starten:

sudo update-rc.d ssh defaults
sudo systemctl enable ssh.socket

Einige erwähnten, dass dieser Befehl:

sudo systemctl enable ssh.service

sollte anstelle dieses Befehls ausgeführt werden:

sudo systemctl enable ssh
adambg
quelle