FreeBSD: Could not load host key: /etc/ssh/ssh_host_ecdsa_key

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 あたりで、異なるパッチレベルからの更新だったからかもしれません。

まあ、これくらいのエラーであれば運用に実害はないので、これですべて終わりであってくれればいいのですが。

コメントを残す