sshd が起動しない(sshd: no hostkeys available — exiting.)

サーバーの管理は、Cockpitで管理していてサービスのメニューを確認すると「cloud-init」が起動に失敗していたので、手動で起動するとSSHのパスワード認証でログインできなくなった。

複数のサーバーも作らないので「cloud-init」は停止しても、SSHのパスワード認証方式でログインできない状況は変わらないので、「cloud-init」関係のサービスを削除して、sshも下記のように再インストールしました

# ssh関係を一旦削除
$ sudo dnf remove openssh openssh-clients openssh-server

# sshの設定ファイルのディレクトリは、リネームしておく
$ sudo mv /etc/ssh /etc/ssh_old

# ssh関連をインストール
$ sudo dnf install openssh openssh-clients openssh-server systemtap

再インストール後ですが、sshdを起動すると下記のエラーで、起動できなくなりました

# sshd を実行すると起動に失敗します
$ sudo systemctl restart sshd.service
Job for sshd.service failed because the control process exited with error code.
See "systemctl status sshd.service" and "journalctl -xeu sshd.service" for details.

# エラーの内容は以下となります
$ sudo journalctl -xeu sshd.service
Feb 08 12:38:31 example.com sshd[20073]: sshd: no hostkeys available -- exiting.
Feb 08 12:38:31 example.com systemd[1]: sshd.service: Main process exited, code=exited, status=1/FAILURE
   Subject: Unit process exited
   Defined-By: systemd
   Support: https://access.redhat.com/support
   
   An ExecStart= process belonging to unit sshd.service has exited.
   
   The process' exit code is 'exited' and its exit status is 1.
Feb 08 12:38:31 example.com systemd[1]: sshd.service: Failed with result 'exit-code'.
   Subject: Unit failed
   Defined-By: systemd
   Support: https://access.redhat.com/support
   
   The unit sshd.service has entered the 'failed' state with result 'exit-code'.
Feb 08 12:38:31 example.com systemd[1]: Failed to start OpenSSH server daemon.
   Subject: A start job for unit sshd.service has failed
   Defined-By: systemd
   Support: https://access.redhat.com/support
   
   A start job for unit sshd.service has finished with a failure.
   
   The job identifier is 12726 and the job result is failed.

原因がわからず、設定ファイルを見直したり、再インストールしても駄目でした。よくよくログを見ると「sshd: no hostkeys available — exiting.」となっています。SSHのホスト鍵がないので作成しないとエラーとなるみたいです

SSHのホスト鍵は「ssh-keygen -A」で作成します。「A」のオプションは、ホスト鍵(/etc/ssh/ssh_host_key、/etc/ssh/ssh_host_dsa_key)を作成されます

$ sudo ssh-keygen -A
ssh-keygen: generating new host keys: RSA 
DSA ECDSA ED25519

SSHのホスト鍵を作成すると、無事に起動したので、SSHをパスワード認証・ポート変更・ルートログインをできないように変更しました

$ sudo vim /etc/ssh/sshd_config
Port 6522
PermitRootLogin no
PasswordAuthentication yes

# 設定を変更したら再起動します
$ sudo systemctl restart sshd

※後々考えると、sshのディレクトリをリネームしたので、ホスト鍵も無くなったので、「sshd: no hostkeys available — exiting.」のエラーとなった思います。
「cloud-init」を削除してもパスワード認証できなかったのは、「/etc/ssh/sshd_config.d/」以下にcloud-initが設定ファイルを追加されていたのが原因のように思います。設定ファイルは削除したので、これ以上調査できないけど、パスワード認証がOffの設定が追加されたと思います