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.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
from:
d /var/run/sshd 0755 root root
に:
d /run/sshd 0755 root root
システムの起動時にすべてがうまくいき、SSHサービスが正常に開始され、SSH経由でログインできます。
これは私の場合と同様に、一部の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。
/
(ルートファイルシステム)のアクセス許可は変更されませんか?する必要があります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: /
役立つ情報をありがとうございました。私の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台のマシン(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ソースコードに基づく修正を取得しました。