204
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

「SSHホスト鍵が変わってるよ!」と怒られたときの対処

SSHでは初回接続時に接続先ホストの公開鍵を保存しておき、次回接続時にホスト鍵を比較して前回と同じホストに接続したかを確認するような仕組みになっています。そのため、IPアドレスの振り直しやOS再インストールなどでホスト鍵が変わってしまった場合、次のようなエラーメッセージが出てSSH接続が失敗してしまいます。

$ ssh example.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 RSA key sent by the remote host is
**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**.
Please contact your system administrator.
Add correct host key in /Users/hnw/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/hnw/.ssh/known_hosts:133
RSA host key for example.com has changed and you have requested strict checking.
Host key verification failed.

この仕組みは中間者攻撃への対策として有用ですが、鍵の変更が意図通りであるような場合は大きなお世話だったりするわけです。

コマンド一発でknown_hostsファイルからホスト鍵を削除する

上記エラーへの対処としては$HOME/.ssh/known_hostsの該当行を削除すれば同じエラーは出なくなります。これはエディタで削除してもいいのですが、下記のようにssh-keygenコマンドの-Rオプションで消すこともできます。

$ ssh-keygen -R example.com
# Host example.com found: line 133 type RSA
/Users/hnw/.ssh/known_hosts updated.
Original contents retained as /Users/hnw/.ssh/known_hosts.old

エディタでファイルを開いて該当行を探して…とやっていると案外時間がかかるので、コマンドライン一発で消せるのは便利です。

次のような形式でホスト名に加えてポート番号を指定することもできます。[]はシェルのワイルドカード文字ですので、クォーティングは必須です。

$ ssh-keygen -R '[example.com]:10022'

何度もSSH鍵の変更が起こるような場合

OSインストールを繰り返しているなどの理由で、特定ホストのホスト鍵が毎回変わるような状況では、上記コマンドを打つのさえ面倒だったりします。そのような場合は次のように$HOME/.ssh/configの設定でホスト鍵のチェックを無効化することができます。

Host 192.168.1.1
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null

言うまでもありませんが、全ホストに対してこの設定を行うと中間者攻撃に対して脆弱になります。必要なときだけ特定ホストのみ設定すべきでしょう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
204
Help us understand the problem. What are the problem?