重新启动后,由于缺少/var/run/sshd,16.04 SSH服务器停止工作

分享于 

10分钟阅读

ubuntu

 
问题:

VPS大约3个月没有重启,出于某种原因,我重启了VPS,之后,我无法通过ssh连接到服务器,我收到的消息是:


ssh: connect to host srvname.com port 22: Connection refused



所以我的问题是:

这个问题的原因是什么?在系统启动时为什么不创建/var/run/sshd

我怎样才能正确解决这个问题?

问题是否可能与VPS的OpenVZ主机相关?我应该要求托管提供商解决它?

systemctl status ssh.servicesshd -Ddp 22journalctl -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




d /var/run/sshd 0755 root root



到:


d /run/sshd 0755 root root



系统启动时一切正常,SSH服务正常启动,我可以通过SSH登录,


答案1:

我发现这是一个bug,这是某些VPS使用的systemd和旧内核的当前版本的错误。正如我们在Launchpad上看到的那样,该错误有时会出现:错误#45234,错误#1811580

这个问题的解决方法很少,它们都以另一种方式创建/var/run/sshd,然后运行SSH服务器,这里有三种可能的解决方案。

解决方法1:按以下方式修改/usr/lib/tmpfiles.d/sshd.conf


d /run/sshd 0755 root root



正如在问题中提到的,/var/run是指向/run的符号链接,最终结果是相同的:

解决方法2:使用Cron作业创建/var/run/sshd并重新启动SSH服务器,你可以使用crontab的root条目,


@reboot mkdir -p -m0755 /var/run/sshd && systemctl restart ssh.service



目前我正在使用这个解决方案,所以它也被测试过。

解决方法3:使用/etc/rc.local执行上述操作。


答案2:

检查你的/ (root文件系统)权限没有被改变?必须是root:root,如下面的两行:


drwxr-xr-x 25 root root 4096 дек 21 06:45 ..


drwxr-xr-x 25 root root 4096 дек 21 06:45 .



如果所有者是另一个用户(不是root ),这将阻止在系统启动时由systemd创建所有临时文件,你可以使用命令检查:


systemd-tmpfiles --create



如果根目录(/ )有不同的权限,请使用以下命令更改它:

 
chown root: /





Server  SSH  
相关文章