/etc/ssh/ssh_host_* の SSH 鍵を再生成する
結論から言うと、上記記事の通り SSH 鍵を削除するなり移動するなりして sshd を再起動すれば自動的に生成してくれる。
# rm -f ssh_host_{ecdsa,ed25519,rsa}_key{,.pub} # systemctl restart sshd
どんな風に実装されてるか気になったので調べた。のでまとめる。 CentOS 7 上だと以下の Unit が生成処理を行っている(終)。
/usr/lib/systemd/system/sshd-keygen.service
[Unit] Description=OpenSSH Server Key Generation ConditionPathExists=|!/etc/ssh/ssh_host_rsa_key ConditionPathExists=|!/etc/ssh/ssh_host_ecdsa_key ConditionPathExists=|!/etc/ssh/ssh_host_ed25519_key PartOf=sshd.service sshd.socket [Service] ExecStart=/usr/sbin/sshd-keygen Type=oneshot RemainAfterExit=yes
通常はやることがないのでこんなログになる。
$ sudo systemctl status sshd-keygen.service ● sshd-keygen.service - OpenSSH Server Key Generation Loaded: loaded (/usr/lib/systemd/system/sshd-keygen.service; static; vendor preset: disabled) Active: inactive (dead) Condition: start condition failed at 日 2016-09-04 02:13:33 JST; 16h ago none of the trigger conditions were met 9月 04 02:13:33 myhost systemd[1]: Started OpenSSH Server Key Generation.
キーを移動して sshd-keygen.service を再起動してみる。
$ mkdir -p sshkeys.old; for i in ssh_host_{ecdsa,ed25519,rsa}_key{,.pub}; do sudo mv /etc/ssh/$i sshkeys.old/$i; done $ ls sshkeys.old/ ssh_host_ecdsa_key ssh_host_ecdsa_key.pub ssh_host_ed25519_key ssh_host_ed25519_key.pub ssh_host_rsa_key ssh_host_rsa_key.pub $ sudo systemctl restart sshd-keygen.service
そうするとこうなる。
$ sudo systemctl status sshd-keygen.service ● sshd-keygen.service - OpenSSH Server Key Generation Loaded: loaded (/usr/lib/systemd/system/sshd-keygen.service; static; vendor preset: disabled) Active: active (exited) since 日 2016-09-04 18:32:28 JST; 3s ago Process: 2417 ExecStart=/usr/sbin/sshd-keygen (code=exited, status=0/SUCCESS) Main PID: 2417 (code=exited, status=0/SUCCESS) 9月 04 18:32:28 myhost systemd[1]: Starting OpenSSH Server Key Generation... 9月 04 18:32:28 myhost sshd-keygen[2417]: Generating SSH2 RSA host key: [ OK ] 9月 04 18:32:28 myhost sshd-keygen[2417]: Generating SSH2 ECDSA host key: [ OK ] 9月 04 18:32:28 myhost sshd-keygen[2417]: Generating SSH2 ED25519 host key: [ OK ] 9月 04 18:32:28 myhost systemd[1]: Started OpenSSH Server Key Generation.
今回は sshd-keygen.service を restart したけど、sshd.service は sshd-keygen.service に依存しているので systemctl restart sshd.service
しても再生成されるのを確認した。
ので、普通は sshd.service を restart すればいい。
ちなみに sshd は restart しても既存の接続が切れることはない。詳しくは以下の記事を参照。