解决无法ssh登录Ubuntu服务器


最近更新了一下VPS上的Ubuntu系统, 然后就无法ssh登录了, 经过一番Google,最后总算重新登录上, 这里记录一下具体的过程。

近期SSH登录VPS然后顺带 apt-get upgrade && apt-get upgrade -y && reboot 了一下。 等了几分钟再登录就出现问题了。

在本地电脑上经过多次尝试,发现应该是服务器端的sshd没有启动。 然后就登录VPS网页后台, sudo /usr/sbin/sshd -T , 发现主要的问题是

Missing privilege separation directory: /var/run/sshd

经过一番Google,发现主要的问题就是这个目录没有创建,使得服务器端的sshd无法启动。 于是按照 ref 中所说, 运行:

mkdir /var/run/sshd
chmod 0755 /var/run/sshd

再次启动sshd,即可成功。

不过这个成功只对这一次有效,如果重启,sshd仍然无法正常启动,而且问题的原因还是以上提及的目录没有创建。 那不可能每次重启还要登录VPS网页后台创建目录。 于是这个ssh无法登录的问题变成了,Ubuntu重启后自动创建\usr\sbin\sshd目录的问题。

每次重启后的操作在包括Ubuntu在内的linux中是可以通过多种方法实现的。 同样通过Google发现了一个较为方便的。

ref 中提及可以在 tmpfiles.d 目录中创建对应的 conf 文件。 于是查看了VPS上该目录下的情况

ls /usr/lib/tmpfiles.d/

发现已经有一个sshd.conf文件存在。 其内容是”d /var/run/sshd 0755 root root“。

之后又在 ref 中找到关于这个讨论, 也就是说这个sshd本身就设置了每次自动创建所需目录,但是由于某种原因失败了。 那是应该换种方式还是看看究竟是什么原因。我试了一下后者。

直接 ls -al /var/run 发现这个不是个目录是个链接

lrwxrwxrwx 1 root root 4 May 2 2017 /var/run -> /run

所以是不是因为这里无法创建? 直接 vim /usr/lib/tmpfiles.d/sshd.conf 删除路径中的 /run , 保存退出,让系统直接在尝试 /run 中创建目录。

再次重启,然后ssh登录就没有问题了,而且是无论重启多少次都行。