最初の起動前にsshフィンガープリントを知るようにRaspberry Piを構成する必要があるため、唯一の方法はコンピューターのSDカードにキーを生成し、フィンガープリントを取得することです。これを行いましたが、ラズベリーが起動すると、生成したキーの上に新しいキーが作成されます。 sshデーモンがそれをしないようにする方法は?初めて起動する場合は、確実にどこかに読み込まれます。それを変更する方法になります。
編集:
私のスクリプトは、生成されたsshファイルを/ etc/sshに配置します。最初のブートでは、これはshサービスの/var/log/daemon.logのログです。
Sep 7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_dsa_key'
Sep 7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_dsa_key.pub'
Sep 7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_ecdsa_key'
Sep 7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_ecdsa_key.pub'
Sep 7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_rsa_key'
Sep 7 16:12:31 raspberrypi sh[297]: removed '/etc/ssh/ssh_Host_rsa_key.pub'
どういうわけか、これらのキーがSSHサービスによって生成されなかったことを知っています。 ssh_Host_ed25519_keyを生成しなかったことに注意してください。それが理由でしょうか?しかし、sshd_config
の行をコメントアウトしました。
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_Host_rsa_key
HostKey /etc/ssh/ssh_Host_dsa_key
HostKey /etc/ssh/ssh_Host_ecdsa_key
#HostKey /etc/ssh/ssh_Host_ed25519_key
キーを検出して削除したのはなぜでしょうか?
編集2:
以前に起動したsdカードからed25519キーを追加しましたが、それでもすべてのキーが削除されました。
Sep 7 16:12:32 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_dsa_key'
Sep 7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_dsa_key.pub'
Sep 7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_ecdsa_key'
Sep 7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_ecdsa_key.pub'
Sep 7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_ed25519_key'
Sep 7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_ed25519_key.pub'
Sep 7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_rsa_key'
Sep 7 16:12:33 raspberrypi sh[311]: removed '/etc/ssh/ssh_Host_rsa_key.pub'
また、各ファイルに適切なアクセス許可を追加するのを忘れたことも確認しましたが、この最後の試行では何もしませんでした。新しい変数を生成するときにsshd
が行うように、秘密鍵に対して600
を、公開鍵に対して644
を実行しました
編集3:
キーの削除をトリガーしたが、見つからなかったコードの一部を見つけることができるかどうかを確認するために、githubソースで「removed」を検索しようとしました: https://github.com/openssh/openssh- portable/search?utf8 =%E2%9C%93&q = removed&type =
Raspbianのイメージには、regenerate_ssh_Host_keysというサービスがあります。
[Unit]
Description=Regenerate SSH Host keys
Before=ssh.service
[Service]
Type=oneshot
ExecStartPre=-/bin/dd if=/dev/hwrng of=/dev/urandom count=1 bs=4096
ExecStartPre=-/bin/sh -c "/bin/rm -f -v /etc/ssh/ssh_Host_*_key*"
ExecStart=/usr/bin/ssh-keygen -A -v
ExecStartPost=/bin/systemctl disable regenerate_ssh_Host_keys
[Install]
WantedBy=multi-user.target
これにより、すでに存在するすべてのキーが削除され、キーが再生成され、サービスが無効になり、サービスが再度実行されなくなります。キーをインストールすると同時に(/etc/systemd/system/multi-user.target.wants/regenerate_ssh_Host_keys.service
ファイルを削除することにより)そのサービスを無効にすることができます。