読者です 読者をやめる 読者になる 読者になる

REMOTE HOST IDENTIFICATION HAS CHANGEDを出さない

業務でも個人でもGCPを使っているのですが、クリックしていくだけでものの数分でサーバーがたつ時代

今日はそんなGCPでGCE(AWSでいうEC2)を使って複数のサーバーにて静的なIPを1つ取得して使いましながらsshで入って作業をしていた
configは下記のようなものを用意

~/.ssh/config

Host 192.0.2.0
  HostName  192.0.2.0
  IdentityFile ~/.ssh/id_rsa
  User userA

作業をしていて一度sshをしたサーバーから別のサーバーにIPを割り当てた後にsshをしようとすると下記のようなエラーが出る

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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
SHA256:AAAAAAAAAAAAAAAAAA
Please contact your system administrator.
Add correct host key in /Users/test/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/test/.ssh/known_hosts:13
ECDSA host key for 192.0.2.0 has changed and you have requested strict checking.
Host key verification failed.

これはsshで接続した際に初回接続に接続先のRSA鍵情報を接続元においており次回以降はそれを照合して意図しないサーバーに接続してないかをチェックしてくれる
そのため今回のようなIPは一緒ではあるが、接続先のマシンが変更された場合は初回とは違うサーバーに接続しようとしてるよと警告してくれている

これが出たときは~/.ssh/known_hostsの該当ipの記載を消すかssh-keygen -R [remote host]コマンドをうって該当ipの情報を消すことで、WARNINGが出なくなり接続することが出来るようになる
このエラーはなりすましに気づくことも出来るので良いが今回のような意図したマシンの変更を繰り返していく場合は少し面倒だなと思ったらそれを回避する方法があった

~/.ssh/configを下記のように編集する

Host 192.0.2.0
  HostName  192.0.2.0
  IdentityFile ~/.ssh/id_rsa
  User userA
  StrictHostKeyChecking no # 初回接続時にきかれるものをskipして接続する defaultは`ask`
  UserKnownHostsFile /dev/null # 本来 ~/.ssh/known_hostsにはかれるものを /dev/nullにすてる

これを追加することにより何度IPを割り当てなおしてもWARNINGが出ることなく接続できるようになる