/ var / run / sshdが見つからないため、再起動後にSSHサーバーが動作しなくなる


23

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 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

d /var/run/sshd 0755 root root

に:

d /run/sshd 0755 root root

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


この問題は、このリンクされた質問で説明されているように、再起動の直前にバージョンアップグレードが行われたため、再起動後に突然表示される場合があります。教訓:カーネルがそれをサポートできると確信できない限り、アップグレードしないでください。

回答:


24

これは、現在のバージョンのsystemdのバグであり、一部のVPS privdesで使用されている古いカーネルのバグであることがわかりました。Launchpadで確認できるように、このバグは時々表示されます:Bug #45234、Bug #1811580 ; またはServerFault:起動するたびに/ var / run / sshdが見つからないのはなぜですか?

この問題の回避策はほとんどありません。それらはすべて、別の方法で作成されます /var/run/sshd、SSHサーバーを実行前ます。以下に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:バグレポート#45234のこのコメント示さ/etc/rc.localれているように、上記と同じように使用します。


1
おかげで、sshは修正されましたが、systemdが破損するというより広範な問題は修正されませんでした。systemd-tmpfiles --createを実行して、すべてのエラーを確認してください
paulzag

1
@paulzagは正しいですが、私の場合、一般的な問題は古いカーネルにあると確信しています。これらのエラーを無視することにしsystemd-tmpfiles --createました。現在の質問はしながら、再起動後に運用SSHサービスを取得する方法についてです問題が従事しているあなたが望む場合は、ソリューションをupvoteすることができます:)。
pa4080

「回避策1」は私のために働きました...ありがとう...投票されました...
Biswadeep Sarkar

2
そのファイルはパッケージマネージャーによって管理されるため、直接変更するよりもオーバーライド する方が適切/usr/lib/tmpfiles.d/sshd.confです。これを行うには、単に/etc/tmpfiles.d/sshd.conf;を変更します。これはsshd.confin よりも優先され/usr/libます。tmpfiles.d(5)のこのセクションを参照してください。グレート答えかかわらず、OpenVZのVPS上であることは、私はこの中に遭遇した正確な状況である。
ZeroKnight

1
回避策1が機能する理由について 。シンボリックリンクの使用を避けているため、問題が発生しており、PrivSepディレクトリが作成されていないのはなぜですか。このスレッドの最後から4番目のメッセージは、これにいくらかの光を当てています。確かに、それはに関するものですが、ここでも同じことが当てはまると感じています。/var/runsystemd-tmpfilessystemd-tmpfiles-clean
ゼロナイト

1

/(ルートファイルシステム)のアクセス許可が変更されていないかどうかを確認できますか?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: /

0

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

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


0

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

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

Ubuntuパッケージはこれを再マッピングしました /run/sshd

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.