SSH 无法启动 - 缺少权限分离目录:/var/run/sshd

Sie*_*odo 13 server ssh 16.04

我有一个运行 Ubuntu 16.04.5 的 VPS,它已经运行了很多年,几乎没有问题。然而,今天我发现我无法使用 SSH 访问服务器,收到“连接被拒绝”错误。我使用 VPS 主机的串行控制台服务访问了服务器,并将问题追溯到 openssh 服务器无法启动。这是service status, service start, 和sshd -t重新启动后的输出:

root@167:/# service ssh status
? ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: failed (Result: start-limit-hit) since Fri 2019-01-18 04:56:42 EST; 24min ago
  Process: 983 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=255)

Jan 18 04:56:42 167 systemd[1]: Failed to start OpenBSD Secure Shell server.
Jan 18 04:56:42 167 systemd[1]: ssh.service: Unit entered failed state.
Jan 18 04:56:42 167 systemd[1]: ssh.service: Failed with result 'exit-code'.
Jan 18 04:56:42 167 systemd[1]: ssh.service: Service hold-off time over, scheduling restart.
Jan 18 04:56:42 167 systemd[1]: Stopped OpenBSD Secure Shell server.
Jan 18 04:56:42 167 systemd[1]: ssh.service: Start request repeated too quickly.
Jan 18 04:56:42 167 systemd[1]: Failed to start OpenBSD Secure Shell server.
Jan 18 04:56:42 167 systemd[1]: ssh.service: Unit entered failed state.
Jan 18 04:56:42 167 systemd[1]: ssh.service: Failed with result 'start-limit-hit'.
root@167:/# service ssh start
Job for ssh.service failed because the control process exited with error code. See "systemctl status ssh.service" and "journalctl -xe" for details.
root@167:/# sshd -t
Missing privilege separation directory: /var/run/sshd
Run Code Online (Sandbox Code Playgroud)

我已经尝试对此进行了一些研究,但似乎没有任何东西有实际的解决方案 - 只是“我有这个问题”的无休止循环没有答案,答案已经过时,或者只是一般无用的信息。

有没有人对接下来要解决/解决此问题的方法有任何想法?当我登录运行更新并重新启动服务器时,SSH 上次运行大约是 12 小时前。

更新

使用此处提供的解决方法 1 解决了问题:https : //askubuntu.com/a/1110843/531533

Gus*_*uss 5

根据此处错误报告,可以通过将目录创建代码添加到/etc/rc.local.

我已经做了一些研究,但我仍然无法弄清楚应该在正常的服务器启动时创建该目录的内容 - 下面有几个脚本/etc可以执行此操作,但它们似乎已被弃用,因为它们与旧的 SysV 启动,我在 SystemD init 设置中找不到任何内容来创建该目录。

[更新]:刚刚注意到@pa4080 评论,这似乎就是它 - 该文件/usr/lib/tmpfiles.d/sshd.conf存在并包含行d /var/run/sshd 0755 root root, in openssh-serverversion 1:7.2p2-4ubuntu2.6

tmpfiles.d目录是systemd-tmpfiles服务的一部分,并在此处记录

这可能是更新异常,因为我已经看到相关的错误报告将其讨论为失败的更新,并且将 openssh-server 更新到最新版本可能会修复它。

  • 在我得到的 16.04 测试系统上,运行 `systemd-tmpfiles --create` 会导致创建目录。这个命令应该在启动时由 SystemD init 进程运行,但是如果在更新后没有重新启动改变了 openssh-server 如何使用该目录的行为,这可以解释你遇到的问题。 (2认同)
  • SierraKomodo,我只是发布了一个 [答案](https://askubuntu.com/a/1110843/566421),我在其中还描述了使用 `crontab` 的第三种方法。 (2认同)