2016-04-18
ssh のホスト鍵を再作成する。
Raspbian Jessie & Wheezy どっちも同じかと。
とりあえず Jessie でやってみた。
作業時の環境:
$ uname -a Linux rasp02 4.1.19+ #858 Tue Mar 15 15:52:03 GMT 2016 armv6l GNU/Linux
参考サイト
http://mirahouse.jp/n10/2014/07/05-143545.html
ホスト鍵は、/etc/ssh/ に各種置いてある。
まずは、デフォルトで使われる(参考サイト)、ssh_host_ecdsa_key (楕円暗号鍵)を更新する。
# ssh-keygen -t ecdsa -b 256 Generating public/private ecdsa key pair. Enter file in which to save the key (/root/.ssh/id_ecdsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in y. Your public key has been saved in y.pub. The key fingerprint is: 34:32:e9:(...省略...):f1:23 root@foobar The key's randomart image is: +---[ECDSA 256]---+ | | |(....省略....) | | | +-----------------+
てな具合。デフォルトでは、ログインユーザーのホームディレクトリの .ssh/ ディレクトリへ作成しようとするので、適宜変更する。
パスフレーズは多分付けないほうがいい。
他にも幾つか鍵があるので、気分で更新してみても良かろう。
上記の -t と -b に指定する値であるが、元のキーと同じにするなら、下記のコマンドで確認すると良い(-tのほうはファイル名から推測できるが)。
# ssh-keygen -l -f 鍵ファイル名(.pubありなしどちらも同じ) 2048 b1:a1:(...省略...):ad:b3 ssh_host_rsa_key.pub (RSA)
先頭がビット数(この例では2014)、末尾が暗号のタイプ(この例ではRSA)と思われる。
sshdの再起動はいらない模様。
ただし、後で困らないように、一応 sshd を再起動して確認したほうが良い。
# systemctl restart sshd.service
ホスト鍵を作成し直したあと、リモートからsshでログインしようとすると、下記のようなメッセージが表示され、ログインできなくなる。
下記の例では、リモートのfoobarhoge上のホスト鍵を更新後にログインしようとしてエラーメッセジが表示されている。
$ ssh foobar @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key has just been changed. The fingerprint for the ECDSA key sent by the remote host is 71:bf:bx(...省略...). Please contact your system administrator. Add correct host key in /home/fuga/.ssh/known_hosts to get rid of this message. Offending ECDSA key in /home/fuga/.ssh/known_hosts:12 ECDSA host key for foobar has changed and you have requested strict checking. Host key verification failed.
手っ取り早く、~/.ssh/known_hosts を削除してしまうか、または、エディタ等で、known_hostsファイル中の該当行を削除してもよい。
ただ、最近は known_hosts ファイルの中身がハッシュ化されており、見ただけではどの行を削除すればよいか分からない。
その場合、下記のコマンドで、該当するエントリ(公開鍵)を削除する。
$ ssh-keygen -R foobar /home/fuga/.ssh/known_hosts updated. Original contents retained as /home/fuga/.ssh/known_hosts.old
あとは再び、sshでログインすればOK。
あるいは下記のような警告が毎回表示されることがある。
$ ssh foobar Warning: the ECDSA host key for 'foobar' differs from the key for the IP address 'xx.xx.xx.xx' Offending key for IP in /home/pi/.ssh/known_hosts:17 Matching host key in /home/hoge/.ssh/known_hosts:18 Are you sure you want to continue connecting (yes/no)?
これは、 known_hostsに登録されている、同じホストを指すホスト名とIPアドレスについて、それぞれが指している公開鍵の内容が違うよ、と言っているようなので、先程と同じく、ssh-keygen でエントリを削除する。
$ ssh-keygen -R 192.168.1.xx
鍵のfingerprintの表示方法。
鍵そのものを指定する場合
# ssh-keygen -l -f 鍵ファイル名(公開鍵・秘密鍵どちらでも結果は同じ) 2048 d0:a6:4e:(...省略...):ad:a3 ssh_host_rsa_key.pub (RSA)
/.ssh/known_hosts内の鍵。一覧表示してくれる。
$ ssh-keygen -l -f ~/.ssh/known_hosts 256 13:ac:(...省略...):d1:24 |1|w1g(...省略...)Ka0= (ECDSA) 256 13:ac:(...省略...):d1:24 |1|j2a(...省略...)Mcx= (ECDSA) (続く・・・)
上の例で -F hogehost をつけると、該当ホスト名(もしくはIPアドレス)のエントリのみを表示してくれる。
注意:
ssh-keygen で-l オプションを忘れると、鍵の作成モードになってしまう。