定期的に忘れるんだけど、~/.ssh/known_hosts
にあるエントリをスクリプトから消すコマンドは、ssh-kengen -R
。
そもそも known_hosts
とは
接続したことのある各ホストの公開鍵を保存しているファイルで、普通の文脈だとユーザレベルのファイルである ~/.ssh/known_hosts
を指します。
サーバレベルのファイルとして、/etc/ssh/known_hosts
もあります。
よくあるケースでは、ssh
ではじめて特定ホストに接続しようとしたときに、エントリが追加されます。
最初に接続するとき以下のようなことを要求され、「このサーバを信頼するか」どうかを判断することになります。
The authenticity of host 'sshsvr (192.168.0.1)' can't be established. RSA key fingerprint is 28:d2:80:56:a3:3c:bf:5b:58:f6:68:97:7d:7d:68:db. Are you sure you want to continue connecting (yes/no)? yes
(http://www.turbolinux.co.jp/products/server/11s/user_guide/sshconnect.html より)
ここで信頼する(yes) と答えると、そのサーバの fingerprint が ~/.ssh/known_hosts
に追加されます。
ハッシュ化や、証明書のことを考えなければ、だいたい以下のような内容になるはずです。
cvs.example.net,192.0.2.10 ssh-rsa AAAA1234.....=
このエントリは、その後のサーバ認証に使われます。 クライアント(ssh 接続を行っているホスト) が ssh 接続を行おうとする度に、接続先とこれらのエントリのホスト名(正確には、hostnames) が比較され、 合致したエントリの fingerprint と、サーバが提示してくる fingerprint が一致しているかを基準にして、ssh は接続して良いかを判断します。
fingerprint が一致していない場合は、以下のようなおなじみのメッセージを出力して、接続は拒絶されます。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
~/.ssh/known_hosts
のエントリを消すユースケース
個人としてのユースケースとしては対象先のサーバをインストールしなおしたとかが多いでしょうし、 サーバのセットアップが自動化された大規模システムにおいては、それらの設定サーバから一時的に ssh 経由でコマンドを投入したい、みたいなケースがあります。
$ vi ~/.ssh/known_hosts
でいけるケースは多いんですが、ハッシュ化されているとそういうわけにもいきません。。。
おまえを消す方法
こんなかんじです。はい。
$ ssh-keygen -R 192.168.99.100 # Host 192.168.99.100 found: line 1 /Users/kiririmode/.ssh/known_hosts updated. Original contents retained as /Users/kiririmode/.ssh/known_hosts.old