web-dev-qa-db-ja.com

/ var / run / sshdがないために、SSHサーバーが再起動後に動作を停止する

VPSが約3か月間再起動されませんでした。 OpenVZ仮想化タイプのサーバーでホストされ、オペレーティングシステムはUbuntu 16.04です。何らかの理由で、VPSを再起動した後、sshを介してサーバーに接続できませんでした。受け取ったメッセージは次のとおりです。

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

そのため、VPSでシリアルコンソールを開いて調査を開始しました... openssh-serverを削除して再インストールしましたが、成功しませんでした。 2時間かけて、インターネットで同様の問題についての記事、質問、回答を読みました。

最後に、システムの起動時に/var/run/sshdディレクトリが作成されないことを理解できました。手動で作成すると、問題なくSSHサービスを開始できますが、次の再起動時に問題が残ります。だから私の質問は:

  • この問題の原因は何ですか?システムの起動中に/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

一時的な解決策:/var/run/runへのシンボリックリンクであることがわかりましたが、これが必要な理由はわかりませんが、ファイルの内容を変更すると/usr/lib/tmpfiles.d/sshd.conf from:

d /var/run/sshd 0755 root root

に:

d /run/sshd 0755 root root

システムの起動時にすべてがうまくいき、SSHサービスが正常に開始され、SSH経由でログインできます。

23
pa4080

これは私の場合と同様に、一部のVPS特権で使用されているsystemdおよび古いカーネルの現在のバージョンのバグであることがわかりました。 Launchpadで確認できるように、このバグは時々発生します:バグ #45234 、バグ #181158 ;またはServerFaultの場合: 毎回の起動後に/ var/run/sshdがないのはなぜですか?

この問題の回避策はほとんどありません。SSHサーバーを実行する前に、/var/run/sshdを作成する別の方法にまとめられます。考えられる3つの解決策を次に示します。


回避策1:/usr/lib/tmpfiles.d/sshd.confを次のように変更します。

d /run/sshd 0755 root root

質問で言及されているように、/var/run/runへのシンボリックリンクであり、最終結果は同じです:/var/run/sshdが作成されます。理由はわかりませんが、これでうまくいきます。


回避策2:/var/run/sshdを作成し、SSHサーバーを再起動するCronジョブを使用します。ルートのcrontabを使用して、この目的-Sudo crontab -eを実行し、次のエントリを追加します。

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

現在このソリューションを使用しているため、テストも行われています。


回避策3:/etc/rc.localを使用して、上記と同じようにします このコメントに示されています onバグレポート#45234。

26
pa4080

/(ルートファイルシステム)のアクセス許可は変更されませんか?する必要がありますroot:root以下の2行のように:

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: /
3
Stefan

役立つ情報をありがとうございました。私のXenial Lubuntuでのssh-serverの問題は、Melebius&Stefanによって提案された「/」の所有権に実際に関連していました。
手動で/var/run/sshdを作成し、一時的にssh.serviceを一時的に再起動します。 sshd.confを編集しても、このシステムでは役に立ちませんでした。次に、最後の提案に従って、ルートフォルダーの所有権を次のように確認しました。

'ls -alF /'確かに、ローカルユーザー/グループに誤って変更されていました。端末からの発行: 'Sudo chown root:root /'は、sshd.confの編集に関係なく、システムを修正しました。そこで、それを元の状態、つまりd /var/run/sshd 0755 root rootに戻しました。

1
Michael

1台のマシン(18.04.02 LTS、OpenSSH 7.6p1)でsshdの複数のインスタンスを実行しているときに、このマシンでこの問題が発生します。

問題は、「特権分離ディレクトリ」の場所を変更するためにプロビジョニングされたsshd(つまり、コマンドラインまたはsshd_configファイル)にスイッチがないことです。 OpenSSH 7.6p1ソースコードによれば、ディレクトリは/var/emptyにあるはずです。

Ubuntuパッケージはこれを/run/sshdに再マップしました。

両方のサービススクリプトがディレクトリを作成しようとすると、起動時にinit.dスクリプトに「スレッドセーフティ」の問題が発生します。 UbuntuとOpenSSHの両方に、sshdでハードコードされた「特権分離ディレクトリ」パス名の問題に対処するように依頼しました。ファイルをアップロードできた場合は、8.0p1 OpenSSHソースコードに基づく修正を取得しました。

0
Luke A Perkins