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

known_hostsの更新(古い公開鍵を削除)

ホスト鍵を作成し直したあと、リモートから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 オプションを忘れると、鍵の作成モードになってしまう。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-09-09 (金) 07:36:03