RHEL8 システムが SSH ホスト キーがない場合に自動的に生成しないのはなぜですか?

RHEL8 システムが SSH ホスト キーがない場合に自動的に生成しないのはなぜですか?

RHEL 8 以前では、SSH ホスト キーが見つからない場合、サービス/etc/sshによって自動的に生成されるのが一般的ですsshd。通常、次のようになります。

/etc/ssh/ssh_host_ecdsa_key
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_rsa_key
/etc/ssh/ssh_host_rsa_key.pub

ノードを再起動するだけでsystemctl restart sshd十分です。

しかし、マイナー バージョン RHEL 8.7 以降では、これは機能しなくなり、sshdジャーナル ログにホスト キーが見つからないというエラーが発生してクラッシュします。なぜでしょうか。どうすれば解決できますか。

答え1

sshdデフォルトでは、サービスは を呼び出し、ディレクトリsshd-keygen.target内のホスト キーの可用性をチェックし、存在しない場合はそれを生成します。/etc/ssh

ただし、このよく知られた機能は、 の新しいバージョンによってブロックされる可能性がありますcloud-init。 の時点では、cloud-init-22.1-5.el8.noarch新しいファイルがあります:

/etc/systemd/system/[email protected]/disable-sshd-keygen-if-cloud-init-active.conf

内容:

# In some cloud-init enabled images the sshd-keygen template service may race
# with cloud-init during boot causing issues with host key generation.  This
# drop-in config adds a condition to [email protected] if it exists and
# prevents the sshd-keygen units from running *if* cloud-init is going to run.
#
[Unit]
ConditionPathExists=!/run/systemd/generator.early/multi-user.target.wants/cloud-init.target

したがって、 を使用する場合、cloud-init次の 2 つのオプションがあります。

  1. ホストキーを手動で生成しますssh-keygen -ASSH ホスト キーを変更するにはどうすればいいですか?詳細とオプションについてはこちらをご覧ください。
  2. 状態をコメントする

単に#記号を前に置くConditionPathExists...

[Unit]
#ConditionPathExists=!/run/systemd/generator.early/multi-user.target.wants/cloud-init.target

次に、 で systemd 構成を再ロードしますsystemctl daemon-reload。通常の動作が再び機能するはずです。

答え2

cloud-init を使用している場合は、cloud-init 構成ファイルの「cloud_init_modules」セクションに「ssh」モジュールを追加することで修正できます。参照cloud-init ドキュメント

これにより、最初の起動時に SSH ホスト キーが生成されます。

問題が発生している場合は、これをテストできます。

cloud-init config file: /etc/cloud/cloud.cfg
Check if you have 'ssh' module in "cloud_init_modules" section
Run this command to verify cloud-init action. NOTE: This will REBOOT your instance and run the cloud-init action from the scratch.
# cloud-init clean --reboot

/etc/ssh/ ディレクトリ内の ssh ホスト キーと sshd サービスのステータスを確認します。

答え3

cloud.cfg で SSH キーの種類を明示的に設定してみてください

resize_rootfs_tmp: /dev
ssh_deletekeys:   1
ssh_genkeytypes: ['rsa', 'ecdsa', 'ed25519']

関連情報