それでは毛玉諸君、これにて失敬

日々の精進を備忘録的に綴ります。

ターミナルからEMRに接続しようとしたら、WARNINGがでてきた

経緯

普段業務でsparkを使って分析をしているんですが、

  1. EMR起動
  2. 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で生成しているようだが、この計算には初期ベクトルが必要らしい。
この初期ベクトルが毎回違うので、値が異なるみたい。

アルゴリズムについては、↓の記事がめちゃわかりやすい。

qiita.com

フィンガープリントを確認したいんだけど

以下コマンドで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)

参考記事

qiita.com