systemd によって有効になっているにもかかわらず、起動時に ssh.service が自動的に起動しないのはなぜですか?

systemd によって有効になっているにもかかわらず、起動時に ssh.service が自動的に起動しないのはなぜですか?

私はRaspberry Pi 4でDebian 11を使用しています(画像はここ)。sshd は適切に設定されており (/etc/ssh/sshd_config のみを編集し、残りはシステムのインストール時から完全に新しいもの)、手動で起動すると正常に動作します。ただし、起動時に systemd によって自動的に起動されません。sudo systemctl ステータス sshd次のように返されます:

● ssh.service - OpenBSD Secure Shell server
     Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: man:sshd(8)
             man:sshd_config(5)

journalctl の出力には ssh に関連するものは何もありません。

これはシステム変数:

[Unit]
Description=OpenBSD Secure Shell server
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
Alias=sshd.service

ファイルsshd を実行しないでください存在しない。ネットワークターゲットアクティブです。トラブルシューティングのためにauditdもインストールしましたが、自動的に正常に起動しますが、再起動後もssh.serviceは停止したままです。

アイデアが尽きました…


アップデート:

sshd プロセスが接続要求ごとに生成されることを発見しました。これは systemd 自体によって管理され、外部のコンピューターが私のコンピューターに接続しようとすると、ジャーナルに明確に出力されます。

oct. 30 13:09:30 RaspServeur systemd[1]: Started OpenBSD Secure Shell server per-connection daemon (117.68.2.55:45784).
░░ Subject: L'unité (unit) [email protected]:22-117.68.2.55:45784.service a terminé son démarrage
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ L'unité (unit) [email protected]:22-117.68.2.55:45784.service a terminé son démarrage, avec le résultat done.
oct. 30 13:09:30 RaspServeur audit[1]: SERVICE_START pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='[email protected]:22-117.68.2.55:45784 comm="systemd" exe="/usr/lib/systemd/systemd" ho>
oct. 30 13:09:33 RaspServeur sshd[1861]: error: kex_exchange_identification: Connection closed by remote host
oct. 30 13:09:33 RaspServeur sshd[1861]: Connection closed by 117.68.2.55 port 45784
oct. 30 13:09:33 RaspServeur systemd[1]: [email protected]:22-117.68.2.55:45784.service: Succeeded.
░░ Subject: Unit succeeded
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░ 
░░ The unit [email protected]:22-117.68.2.55:45784.service has successfully entered the 'dead' state.
oct. 30 13:09:33 RaspServeur audit[1]: SERVICE_STOP pid=1 uid=0 auid=4294967295 ses=4294967295 subj==unconfined msg='[email protected]:22-117.68.2.55:45784 comm="systemd" exe="/usr/lib/systemd/systemd" hos>

sshdの並列インストールがデフォルト設定で存在するようなものです。使用する特定のポート番号などの設定を含む独自の設定は、sshd.serviceを手動で起動しないと機能しません。しかし、デフォルトポートでそのシャドウsshdに正常に接続でき、systemctl ステータス sshdまだサービスが停止していると報告されています…

状況は不気味になり、SD カードを消去して、事前構成が少ない別のディストリビューションのイメージをインストールするには、2 本の指が必要です。

答え1

これは質問者と同じ問題でしょうか?質問 #442181ありましたか? つまり、バインドするインターフェイス/アドレスがまだ準備されていないため、sshd はブート時に起動に失敗します。サーバー ソケットに非標準ポートを指定したと書かれていますが、特定のネットワーク インターフェイスや IP アドレスも指定しましたか?

しかし、systemdが標準設定を使用する接続ごとのデーモンを起動する理由はわかりません。あなたが示唆しているように、それはデフォルトのシステム設定の一部かもしれません。質問 #507705ここでは systemd の「ソケット アクティベーション」について説明していますが、これは明らかに接続ごとにサービスを生成する機能です。 という名前の systemd ユニット ファイルを探します。 を使用して、この機能がどのように動作するかに関する情報を取得ssh.socketできます。man systemd.socket

systemctl status ssh.socket編集: systemd の SSH サーバー ソケットが有効になっているかどうかを確認するために使用できるはずです。

答え2

sshd を手動で起動した場合、systemd はそれを起動済みとして登録しないので、systemctl が何も表示しないのは当然です。各 sshd は実際にはリスニング プロセスであり、接続が確立されると、この接続を処理する別のプロセスが分岐します。psこれを反映して、複数の sshd プロセスが存在することになります。sshd リスナーを強制終了しても、接続を処理している他の sshd プロセスは存続します。

sshd を起動し、systemctl start sshd を実行します。これは 2 つの sshd を起動するのと同じであり、すべてが同じポートを使用しようとするとブロックされる可能性があります。

お役に立てれば幸いです

関連情報