Portsコレクションメンテナンスのエラー対策として、昨日、複数の FreeBSD サーバーのOSを 8.3 から 8.4 にアップデートしました。各サーバーごとに3時間から4時間くらい掛かる作業でしたが、おかげで “unknown modifier” のエラーは出なくなり、めでたしめでたしとなったはずだったのですが、予想通り OSアップデートはすんなりとは終わりません。必ず何かトラブルが発生します。
/var/log/message に約30分おきに、
error: Could not load host key: /etc/ssh/ssh_host_ecdsa_key
が記録されるようになりました。
/etc/ssh ディレクトリを確認してみたところ、以下のようになっており、確かに ssh_host_ecdsa_key は見あたりません。この鍵ファイルを作って保存すれば解決しそうです。
> ll /etc/ssh total 274 -rw-r--r-- 1 root wheel 245058 5月 14 03:17 moduli -rw-r--r-- 1 root wheel 1677 5月 14 03:17 ssh_config -rw------- 1 root wheel 668 9月 26 2011 ssh_host_dsa_key -rw-r--r-- 1 root wheel 615 9月 26 2011 ssh_host_dsa_key.pub -rw------- 1 root wheel 542 9月 26 2011 ssh_host_key -rw-r--r-- 1 root wheel 347 9月 26 2011 ssh_host_key.pub -rw------- 1 root wheel 1679 9月 26 2011 ssh_host_rsa_key -rw-r--r-- 1 root wheel 407 9月 26 2011 ssh_host_rsa_key.pub -rw-r--r-- 1 root wheel 3851 5月 14 03:17 sshd_config
また、エラーメッセージを検索すれば関係する情報はたくさん表示されるのでエラーを出なくするのは簡単そうなのですが、なぜ?という疑問が残りますので、まだ FreeBSD 8.3 のまま残っているコールドバックアップサーバーのディレクトリと比較して見ることにしました。
<8.3> > ll total 142 -rw-r--r-- 1 root wheel 125811 Feb 18 2011 moduli -rw-r--r-- 1 root wheel 1683 Oct 1 2012 ssh_config -rw------- 1 root wheel 668 Apr 6 2012 ssh_host_dsa_key -rw-r--r-- 1 root wheel 615 Apr 6 2012 ssh_host_dsa_key.pub -rw------- 1 root wheel 542 Apr 6 2012 ssh_host_key -rw-r--r-- 1 root wheel 347 Apr 6 2012 ssh_host_key.pub -rw------- 1 root wheel 1679 Apr 6 2012 ssh_host_rsa_key -rw-r--r-- 1 root wheel 407 Apr 6 2012 ssh_host_rsa_key.pub -rw-r--r-- 1 root wheel 3683 Oct 1 2012 sshd_config
<FreeBSD 8.3 /etc/ssh/sshd_config の一部> #Protocol 2 # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key <FreeBSD 8.4 /etc/ssh/sshd_config の同一箇所> #Protocol 2 # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # 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
コメント文になっていますが、確かに ssh_host_ecdsa_key が追加になっていますから、FreeBSD に組み込まれている sshd が 8.3 と 8.4 の間で仕様変更されたことによるものというのが原因のようです。
となると、あとは、ssh_host_ecdsa_key を作るだけ。メッセージを検索したページの情報によると、
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
と実行すれば新しい鍵ファイルが生成されてエラーが出なくなるとのこと。-N に続くシングルクォートに文字列を適当に入れればそれがパスフレーズになります。
不思議なことに、更新した3台のサーバーのうち、昨日更新した2台にエラーが発生し、一昨日作業を行った1台には今回のエラーは出力されていません。エラーが出なかったのは、FreeBSD 8.3 の p16 から8.4 へ更新したもので、エラーが発生した2台はパッチが入っていない、または p3 あたりで、異なるパッチレベルからの更新だったからかもしれません。
まあ、これくらいのエラーであれば運用に実害はないので、これですべて終わりであってくれればいいのですが。