Mein VPS wurde ungefähr 3 Monate lang nicht neu gestartet. Es wird auf einem Server mit OpenVZ-Virtualisierungstyp gehostet und das Betriebssystem ist Ubuntu 16.04. Aus irgendeinem Grund habe ich den VPS neu gestartet und konnte danach keine Verbindung zum Server über ssh herstellen. Die folgende Nachricht lautet:
ssh: connect to Host srvname.com port 22: Connection refused
Also habe ich eine serielle Konsole auf dem VPS geöffnet und mit der Untersuchung begonnen ... Ich habe den openssh-server
Ohne Erfolg gelöscht und neu installiert. Ich habe zwei Stunden damit verbracht, Artikel, Fragen und Antworten zu ähnlichen Themen im Internet zu lesen.
Endlich habe ich verstanden, dass das Verzeichnis /var/run/sshd
Während des Systemstarts nicht erstellt wird. Sobald ich es manuell erstellt habe, kann ich den SSH-Dienst problemlos starten, aber beim nächsten Neustart bleibt das Problem bestehen . Meine Fragen sind also:
Was könnte die Ursache für dieses Problem sein? Warum wird /var/run/sshd
Während des Systemstarts nicht erstellt?
Wie kann ich das Problem richtig lösen? Ich habe eine zeitliche Lösung gefunden, die am Ende dieses Beitrags erwähnt wird.
Kann das Problem mit dem OpenVZ-Host des VPS zusammenhängen? Soll ich den Hosting-Anbieter bitten, es zu lösen?
Die Ausgabe von systemctl status ssh.service
, sshd -Ddp 22
Und journalctl -xe
Lautet:
# systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: failed (Result: start-limit-hit) since вт 2019-01-15 12:58:08 EET; 22s ago
Process: 407 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=255)
яну 15 12:58:07 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
яну 15 12:58:07 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 12:58:07 srvname systemd[1]: ssh.service: Failed with result 'exit-code'.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
яну 15 12:58:08 srvname systemd[1]: Stopped OpenBSD Secure Shell server.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Start request repeated too quickly.
яну 15 12:58:08 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 12:58:08 srvname systemd[1]: ssh.service: Failed with result 'start-limit-hit'.
# $(which sshd) -Ddp 22
debug1: sshd version OpenSSH_7.2, OpenSSL 1.0.2g 1 Mar 2016
debug1: private Host key #0: ssh-rsa SHA256:...
debug1: private Host key #1: ssh-dss SHA256:...
debug1: private Host key #2: ecdsa-sha2-nistp256 SHA256:...
debug1: private Host key #3: ssh-ed25519 SHA256:...
Missing privilege separation directory: /var/run/sshd
# journalctl -xe
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has begun starting up.
яну 15 13:21:21 srvname sshd[1688]: Missing privilege separation directory: /var/run/sshd
яну 15 13:21:21 srvname systemd[1]: ssh.service: Control process exited, code=exited status=255
яну 15 13:21:21 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has failed.
--
-- The result is failed.
яну 15 13:21:21 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 13:21:21 srvname systemd[1]: ssh.service: Failed with result 'exit-code'.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
яну 15 13:21:22 srvname systemd[1]: Stopped OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has finished shutting down.
яну 15 13:21:22 srvname systemd[1]: Starting OpenBSD Secure Shell server...
-- Subject: Unit ssh.service has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has begun starting up.
яну 15 13:21:22 srvname sshd[1691]: Missing privilege separation directory: /var/run/sshd
яну 15 13:21:22 srvname systemd[1]: ssh.service: Control process exited, code=exited status=255
яну 15 13:21:22 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has failed.
--
-- The result is failed.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Failed with result 'exit-code'.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
яну 15 13:21:22 srvname systemd[1]: Stopped OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has finished shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has finished shutting down.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Start request repeated too quickly.
яну 15 13:21:22 srvname systemd[1]: Failed to start OpenBSD Secure Shell server.
-- Subject: Unit ssh.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit ssh.service has failed.
--
-- The result is failed.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Unit entered failed state.
яну 15 13:21:22 srvname systemd[1]: ssh.service: Failed with result 'start-limit-hit'.
Der Inhalt von /usr/lib/tmpfiles.d/sshd.conf
Und /etc/init/ssh.conf
Lautet:
# cat /usr/lib/tmpfiles.d/sshd.conf
d /var/run/sshd 0755 root root
# cat /etc/init/ssh.conf | sed '/^#/ d'
description "OpenSSH server"
start on runlevel [2345]
stop on runlevel [!2345]
respawn
respawn limit 10 5
umask 022
env SSH_SIGSTOP=1
expect stop
console none
pre-start script
test -x /usr/sbin/sshd || { stop; exit 0; }
test -e /etc/ssh/sshd_not_to_be_run && { stop; exit 0; }
mkdir -p -m0755 /var/run/sshd
end script
exec /usr/sbin/sshd -D
Zusätzliche Informationen zum System:
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
# uname -a
Linux srvname 2.6.32-042stab127.2 #1 SMP Thu Jan 4 16:41:44 MSK 2018 x86_64 x86_64 x86_64 GNU/Linux
# apt show openssh-server | grep 'Version'
Version: 1:7.2p2-4ubuntu2.6
Die zeitliche Lösung : Ich habe festgestellt, dass /var/run
Ein symbolischer Link zu /run
Ist. Ich weiß nicht, warum dies erforderlich ist, aber als ich den Inhalt der Datei geändert habe /usr/lib/tmpfiles.d/sshd.conf
Von:
d /var/run/sshd 0755 root root
zu:
d /run/sshd 0755 root root
beim Systemstart läuft alles gut, der SSH-Dienst wird normal gestartet und ich kann mich über SSH anmelden.
Ich fand, dass dies ein Fehler mit der aktuellen Version von systemd und alten Kerneln ist, die von einigen VPS-Privilegien verwendet werden, wie es in meinem Fall der Fall ist. Dieser Fehler tritt von Zeit zu Zeit auf, wie wir auf dem Launchpad sehen können: Bug # 45234 , Bug # 181158 ; oder auf ServerFault: Warum fehlt mir/var/run/sshd nach jedem Start?
Es gibt nur wenige Problemumgehungen für dieses Problem. Alle bieten eine alternative Möglichkeit, um /var/run/sshd
Vor dem Ausführen des SSH-Servers zu erstellen. Hier sind drei mögliche Lösungen.
Problemumgehung 1: Ändern Sie /usr/lib/tmpfiles.d/sshd.conf
Wie folgt:
d /run/sshd 0755 root root
Wie in der Frage erwähnt, ist /var/run
Eine symbolische Verknüpfung zu /run
, Das Endergebnis ist identisch: /var/run/sshd
Wird erstellt. Ich weiß nicht warum, aber das funktioniert.
Problemumgehung 2: Verwenden Sie einen Cron-Job, der /var/run/sshd
Erstellt und den SSH-Server neu startet. Sie können das crontab
des Roots verwenden Führen Sie dazu Sudo crontab -e
aus und fügen Sie den folgenden Eintrag hinzu:
@reboot mkdir -p -m0755 /var/run/sshd && systemctl restart ssh.service
Derzeit verwende ich diese Lösung, daher wird sie auch getestet.
Problemumgehung 3: Verwenden Sie /etc/rc.local
, Um dasselbe wie oben zu tun, wie es ist in diesem Kommentar gezeigt auf Fehlerbericht # 45234.
Könnten Sie überprüfen, ob Ihr /
(Root-Dateisystem) Berechtigungen werden nicht geändert? Muss sein root:root
wie die beiden folgenden Zeilen:
drwxr-xr-x 25 root root 4096 дек 21 06:45 ..
drwxr-xr-x 25 root root 4096 дек 21 06:45 .
Wenn der Eigentümer ein anderer Benutzer (und nicht root) ist, wird verhindert, dass während des Systemstarts alle temporären Dateien von systemd erstellt werden. Sie können auch mit dem Befehl überprüfen:
systemd-tmpfiles --create
Wenn der Stammordner (/
) hat eine andere Berechtigung, bitte ändern Sie diese mit dem folgenden Befehl:
chown root: /
Vielen Dank an alle für hilfreiche Informationen. Das Problem mit dem SSH-Server auf meinem Xenial Lubuntu hing tatsächlich mit dem Besitz von '/' zusammen, wie von Melebius & Stefan vorgeschlagen.
Manuelles Erstellen von /var/run/sshd
und ssh.service vorübergehend neu starten ssh-server vorübergehend. Bearbeiten der sshd.conf
hat in diesem System nicht geholfen. Nach dem letzten Vorschlag überprüfte ich den Besitz des Stammordners mit:
'ls -alF /
'und tatsächlich wurde es versehentlich in einen lokalen Benutzer/eine lokale Gruppe geändert. Ausgabe vom Terminal: 'Sudo chown root:root /
'hat mein System repariert, unabhängig von der Bearbeitung auf sshd.conf
. Also habe ich das in seinen ursprünglichen Zustand zurückversetzt, d. H. d /var/run/sshd 0755 root root
.
Ich habe dieses Problem auf meinem Computer, wenn ich mehrere Instanzen von sshd auf einem einzelnen Computer ausführe (18.04.02 LTS, OpenSSH 7.6p1).
Das Problem besteht darin, dass in sshd (d. H. Befehlszeile oder in der Datei sshd_config
) Keine Schalter zum Ändern des Speicherorts des "Verzeichnis zur Trennung von Berechtigungen" vorgesehen sind. Das Verzeichnis sollte sich gemäß dem OpenSSH 7.6p1-Quellcode im /var/empty
Befinden.
Das Ubuntu-Paket hat dies /run/sshd
Neu zugeordnet.
Es gibt ein "Thread-Sicherheitsproblem" in den init.d
- Skripten beim Booten, wenn beide Dienstskripte versuchen, das Verzeichnis zu erstellen. Ich habe sowohl Ubuntu als auch OpenSSH gebeten, das Problem der fest codierten Pfadnamen für das Verzeichnis zur Trennung von Berechtigungen in sshd zu beheben. Wenn ich Dateien hochladen könnte, habe ich das basierend auf dem 8.0p1 OpenSSH-Quellcode behoben.