Nehmen Sie die Änderungen in der Datei sshd_config vor, ohne den Server neu zu starten

33

Ich habe die Konfiguration in der Datei geändert

/etc/ssh/sshd_config

wurde aber erst nach dem Neustart des Servers wirksam. Wie nehme ich Änderungen vor, ohne den Server neu zu starten?

Maxim Yefremov
quelle
Mit können Sie sudo service ssh restartden Dienst neu starten, damit er wirksam wird. Denken Sie jedoch daran, dass Ihre Sitzung beendet wird, wenn Sie über SSH verbunden sind.
AzkerM

Antworten:

39

Starten Sie einfach den sshd-Dienst neu:

sudo service sshd restart

oder:

sudo /etc/init.d/sshd restart
Pathin
quelle
6
Was ist, wenn ich eine SSH-Verbindung habe?
Anwar
7
nichts ... sshd bouncing ist intelligent genug , um bestehende SSH - Verbindungen zu ermöglichen, fröhlich unvermindert weitergehen
Scott Stensland
4
Ich empfehle, nichts direkt in /etc/init.d auszuführen. Verwenden Sie den Befehl "service". Die meisten Dienste interessieren sich nicht dafür, aber es gibt einige, die dies tun, weil sie von Umgebungsvariablen beeinflusst werden. "service" sorgt dafür, dass die Umwelt bereinigt wird. Wenn Sie beispielsweise "sudo" ausführen, bleibt die Umgebungsvariable HOME in Ihrem Nicht-Root-Ausgangsverzeichnis.
Chris Cogdon
5
sudo service ssh restart

werde es nicht tun. Sie müssen sshd neu starten, nicht ssh:

sudo service sshd restart
William Dowling
quelle
3
Hängt von der Systemkonfiguration ab. In Lubuntu 14.04 sudo service ssh restartfunktioniert sudo service sshd restartsuper , während "sshd: unrecognized service" meldet. Nicht sicher, warum dies variiert, obwohl ...
Schulwitz
3

Es gibt eine noch weniger aufdringliche Möglichkeit, dies zu tun, ohne den SSH-Dienst neu zu starten.

Von man sshd:

sshd liest seine Konfigurationsdatei erneut, wenn es ein Aufhängesignal, SIGHUP, empfängt, indem es sich selbst mit dem Namen und den Optionen ausführt, mit denen es gestartet wurde, z. B. / usr / sbin / sshd.

Sie können also einen Befehl wie den folgenden verwenden, um SIGHUP an den SSH-Serverprozess zu senden:

sudo kill -SIGHUP $(pgrep -f "sshd -D")

Der pgrep -f "sshd -D"Teil gibt nur die PID des sshd-Dämonprozesses zurück, der auf neue Verbindungen wartet, da es wahrscheinlich für jede aktive Sitzung andere PIDs gibt, die das Signal nicht benötigen.

Steven K
quelle
2
Dies ist die sicherste Methode zum erneuten Laden der Konfiguration ( stribika.github.io/2015/01/04/secure-secure-shell.html ): "Seien Sie äußerst vorsichtig, wenn Sie SSH auf einem Remote-Host konfigurieren. Führen Sie immer eine aktive Sitzung durch, niemals Starten Sie sshd neu. Stattdessen können Sie das SIGHUP-Signal senden, um die Konfiguration neu zu laden, ohne Ihre Sitzung zu beenden. Sie können noch vorsichtiger sein, indem Sie eine neue sshd-Instanz auf einem anderen Port starten und diese testen. "
Adriano Lucas
Gibt es einen bedeutungsvollen Unterschied zu sudo pkill -HUP sshd?
AdamKalisz
@Adam Sie möchten nur den Abhörprozess HUPEN, nicht die aktiven Clients, die auch sshdProzesse sind. sudo pkill -HUP -f "sshd -D"ist eine verlockende Alternative, aber dann signalisiert pkill seinem eigenen sudoElternteil, da seine vollständige Befehlszeile mit seinem eigenen Suchmuster übereinstimmt. Sie können sich ein Muster einfallen lassen, das nicht mit sich selbst übereinstimmt ... -f "sshd -[D], das jedoch die Dinge ein wenig verschleiert. Ich denke, dass die pgrep-Methode für die Lernenden einfacher ist, den Kopf herumzureißen.
Steven K
2

Als Root-Check

service --status-all | grep ssh

Ich hatte keinen sshdService, aber einen sshauf dem Ubuntu-Server. Dann

service ssh restart
Jaroslaw Nikitenko
quelle
2

Für Systemd-Systeme - Ubuntu-Standard

sudo systemctl reload sshd.service

oder

 sudo systemctl reload sshd

oder

 sudo /bin/systemctl reload sshd.service

Für Sysvinit-Systeme

sudo service sshd reload

oder

sudo /etc/init.d/sshd reload
abu_bua
quelle
0

Ein erneutes Laden ist möglicherweise eine bessere Alternative zum Neustart

sudo service sshd reload

Unter der Haube sendet es ein HUPSignal an den sshd-Daemon-Prozess, fast auf dieselbe Weise, wie Steven K bereits geantwortet hat . Der Unterschied besteht darin, dass diese Variante die killprocFunktion anstelle des killBefehls direkt verwendet, um das Signal noch präziser zu senden (um mögliche Fehler beim Senden von Signalen an falsche Prozesse zu reduzieren). Die Konfiguration wird erneut gelesen, ohne den Dienst neu zu starten / zu stoppen.

Natürlich lohnt es sich herauszufinden, wie genau SSH-Deamon eigentlich heißt, wie andere besprochen haben.

Alexander Ites
quelle