経緯
普段業務でsparkを使って分析をしているんですが、
- EMR起動
- EC2サーバーからSSHでEMRにログイン
みたいなステップでEMRサーバーにアクセスしています。
ある日、いつものようにEMRにログインしようとしたら、以下のような警告が出て接続に失敗しました。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ 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 the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 29:24:c2:69:a3:b0:dc:4d:23:fc:9d:85:9f:ea:01:9b. Please contact your system administrator. Add correct host key in /home/grgrjnjn/.ssh/known_hosts to get rid of this message. Offending key in /home/grgrjnjn/.ssh/known_hosts:3 RSA host key for remote_host has changed and you have requested strict checking. Host key verification failed.
なんぞこれ?
ということで調べてみました。
原因
EMRを起動すると、毎回異なるIPアドレスのサーバーが作成されるんですけど、
たまたま以前に使用したものとIPアドレスが同じEMRが作成され、.ssh/known_hostsにフィンガープリントが残っていたためでした。
対処
known_hostsの該当行を削除すると無事接続できました。
直接編集しても、以下コマンドを実行してもいけます。
ssh-keygen -R {remote_host_name}
気合の入った補足
known_hostsってなに?
クライアント側で保存している、接続先サーバの情報。
SSH接続時には、以前保存した情報といま接続しようとしているサーバの情報が一致しているかを確認する。
こうすることで、ユーザ(クライアント)が知らない間に、別のサーバへ接続してしまうことを防ぐことが出来る。
フィンガープリントってなに?
接続先サーバーを識別するために使う(指紋的なやつ)。
公開鍵をハッシュ化しているようだ。
同じ公開鍵を使ってフィンガープリント生成しているのに、毎回異なる値になるのはなぜ?
フィンガープリントはSHA256で生成しているようだが、この計算には初期ベクトルが必要らしい。
この初期ベクトルが毎回違うので、値が異なるみたい。
アルゴリズムについては、↓の記事がめちゃわかりやすい。
フィンガープリントを確認したいんだけど
以下コマンドでEMRサーバー上に置いてある公開鍵のフィンガープリントを確認することができる。
ssh -V >> OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 ssh-keygen -lf authorized_keys # 接続先サーバーに置いてある公開鍵 >> 2048 SHA256: {hogehogehoge}/{fugafugafuga} xxxxxx@{EC2のip} (RSA)