Мой VPS не перезагружался около 3 месяцев. Он размещен на сервере с типом виртуализации OpenVZ, а операционная система - Ubuntu 16.04. По какой-то причине я перезагрузил VPS, и после этого я не смог подключиться к серверу через ssh. Я получил следующее сообщение:
ssh: connect to host srvname.com port 22: Connection refused
Поэтому я открыл последовательную консоль на VPS и начал расследование ... Я удалил и переустановил openssh-server
безуспешно. Я потратил два часа, читая статьи, вопросы и ответы о подобных проблемах в Интернете.
Наконец мне удалось понять, что каталог /var/run/sshd
не создается при запуске системы. И как только я создаю его вручную, я могу без проблем запустить службу SSH, но при следующей перезагрузке проблема остается. Итак, мои вопросы:
Что может быть причиной этой проблемы? Почему
/var/run/sshd
не создается при запуске системы?Как я могу решить проблему надлежащим образом? Я нашел временное решение, которое упоминается в конце этого поста.
Может ли проблема быть связана с хостом OpenVZ VPS? Стоит ли попросить хостинг-провайдера решить эту проблему?
Выход systemctl status ssh.service
, sshd -Ddp 22
и journalctl -xe
это:
# 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'.
Содержание /usr/lib/tmpfiles.d/sshd.conf
и /etc/init/ssh.conf
есть:
# 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
Дополнительная информация о системе:
# 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
Временное решение:
я обнаружил, что /var/run
это символическая ссылка /run
, я не знаю, зачем это нужно, но когда я изменил содержимое файла /usr/lib/tmpfiles.d/sshd.conf
из:
d /var/run/sshd 0755 root root
чтобы:
d /run/sshd 0755 root root
все идет хорошо при запуске системы, служба SSH запускается нормально, и я могу войти через SSH.
Ответы:
Я обнаружил, что это ошибка в текущей версии systemd и старых ядрах, которые используются некоторыми VPS Privdes, как и в моем случае. Эта ошибка появляется время от времени, как мы видим на Launchpad: Bug # 45234 , Bug # 1811580 ; или на ServerFault: почему я пропускаю / var / run / sshd после каждой загрузки?
Существует несколько способов решения этой проблемы, все они объединяются в альтернативный способ создания
/var/run/sshd
до запуска сервера SSH. Вот три возможных решения.Обходной
/usr/lib/tmpfiles.d/sshd.conf
путь 1: измените следующим образом:Как уже упоминалось в вопросе,
/var/run
это символическая ссылка/run
, конечный результат идентичен:/var/run/sshd
создан. Я не знаю почему, но это работает.Обходной путь 2: Используйте задание Cron, которое создаст
/var/run/sshd
и перезапустит сервер SSH, вы можете использоватьcrontab
для этого рут - выполнитеsudo crontab -e
и добавьте следующую запись:В настоящее время я использую это решение, поэтому оно также проверено.
Обходной путь 3: Используйте
/etc/rc.local
для выполнения действий, описанных выше, как показано в этом комментарии к сообщению об ошибке № 45234.источник
systemd-tmpfiles --create
показывают, потому что на данный момент на сервере нет никаких заметных сбоев. В общем, текущий вопрос о том, как запустить службу SSH после перезагрузки, пока проблема занята. Если хотите, вы можете проголосовать за решение :)/usr/lib/tmpfiles.d/sshd.conf
а не изменить его напрямую, так как этот файл управляется менеджером пакетов. Для этого просто внесите изменения в/etc/tmpfiles.d/sshd.conf
; это будет иметь приоритет надsshd.conf
дюйма/usr/lib
. Смотрите этот раздел в tmpfiles.d (5) . Отличный ответ, несмотря на то, что я был на OpenVZ VPS, это именно та ситуация, с которой я столкнулся./var/run
символическую ссылку,systemd-tmpfiles
с чем связана проблема, и почему не создается каталог PrivSep. 4-е последнее сообщение этой темы проливает некоторый свет на это. Конечно, это касаетсяsystemd-tmpfiles-clean
, но я чувствую, что то же самое применимо и здесь.Не могли бы вы проверить,
/
не изменились ли ваши (корневая файловая система) разрешения? Должно бытьroot:root
как две строки ниже:Если владельцем является другой пользователь (а не пользователь root), это предотвратит создание всех временных файлов с помощью systemd во время запуска системы. Вы также можете проверить с помощью команды:
Если корневая папка (
/
) имеет другое разрешение, измените ее с помощью следующей команды:источник
Спасибо всем за полезную информацию. Проблема с ssh-сервером на моем Xenial Lubuntu действительно была связана с владением '/', как предлагали Melebius & Stefan.
Вручную создать
/var/run/sshd
и перезапустить ssh.service временно ssh-сервер временно. Редактированиеsshd.conf
не помогло в этой системе. Затем, следуя последнему предложению, я проверил владение корневой папкой с помощью:'
ls -alF /
' и, конечно же, он был случайно изменен на локального пользователя / группу. Выдача из терминала: 'sudo chown root:root /
' исправлена моя система, независимо от правки наsshd.conf
. Таким образом я восстановил , что в его первоначальное состояние, то естьd /var/run/sshd 0755 root root
.источник
Эта проблема возникает на моей машине, когда я запускаю несколько экземпляров sshd на одной машине (18.04.02 LTS, OpenSSH 7.6p1).
Проблема заключается в том, что в sshd (т. Е. Командной строке или
sshd_config
файле) нет переключателей, предназначенных для изменения местоположения «каталога разделения привилегий». Каталог должен находиться в/var/empty
соответствии с исходным кодом OpenSSH 7.6p1.Пакет Ubuntu переназначил это на
/run/sshd
.Существует проблема «безопасности потоков» в
init.d
сценариях при загрузке, когда оба служебных сценария пытаются создать каталог. Я попросил Ubuntu и OpenSSH решить проблему жестко закодированных имен путей «каталога разделения привилегий» в sshd. Если бы я мог загружать файлы, у меня есть исправление, основанное на исходном коде OpenSSH 8.0p1.источник