Azure Virtual Machines での SSH 接続エラーの対処

実行環境

エラー内容

Azure Virtual Machines で作成した DNS 名設定済み Ubuntu 18.04 LTS の仮想マシンへ接続しようとしたところ、

> ssh -i MinecraftServer_key.pem hoge@huga.japaneast.cloudapp.azure.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for huga.japaneast.cloudapp.azure.com has changed,
and the key for the corresponding IP address 13.78.34.44
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in C:\\Users\\hoge/.ssh/known_hosts:7
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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:MSbTka2beU3ZRJp5NjUMO136ebLl8YntvB2+h+Zd6wk.
Please contact your system administrator.
Add correct host key in C:\\Users\\hoge/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in C:\\Users\\hoge/.ssh/known_hosts:6
ECDSA host key for huga.japaneast.cloudapp.azure.com has changed and you have requested strict checking.
Host key verification failed.

このようなエラーが表示されて接続できませんでした。ちなみに、接続テストでは問題ありませんでした。

f:id:takunology:20210409224318p:plain

解決方法

1. DNS 名を使用せずに IP アドレスで接続する

DNS名の部分を IP アドレス に変更して同じようなコマンドを実行することで接続できました。上の例では、

ssh -i MinecraftServer_key.pem hoge@huga.japaneast.cloudapp.azure.com

というコマンドでしたが、DNSの部分を変更して

ssh -i MinecraftServer_key.pem hoge@13.78.34.44

とすることで接続できました。

2. known_hosts を編集して接続する

SSH 接続を行うと、known_hosts というファイルに接続先のサーバアドレスが記述されます。これは以前接続したことがあるサーバかどうかを判断し、接続時に検証することでセキュアな通信を保証するための機能です。

私の場合、イベントで使用するためにDNS名を何度も同じ名前にして Azure VM のネットワーク設定を行っていました。したがって、同じDNS名なのに宛先IPアドレスや秘密キーが一致せず、誰かが不正にアクセスしていることが検知されてブロックされていたようです。

その問題のファイルは C:/<ユーザ名>/hoge/.ssh/known_hosts にあります。中身はこのようになっています。

20.48.25.186 ecdsa-sha2-nistp256 <秘密キー1>
hogehoge.japaneast.cloudapp.azure.com,13.73.27.129 ecdsa-sha2-nistp256 <秘密キー2>
20.44.155.158 ecdsa-sha2-nistp256 <秘密キー3>
hugahuga.japaneast.cloudapp.azure.com,52.246.191.169 ecdsa-sha2-nistp256 <秘密キー4>
hoge.eastasia.cloudapp.azure.com,13.70.5.68 ecdsa-sha2-nistp256 <秘密キー5>
hoge.japaneast.cloudapp.azure.com,20.48.99.25 ecdsa-sha2-nistp256 <秘密キー6>
13.78.34.44 ecdsa-sha2-nistp256 <秘密キー7>

DNShoge.japaneast.cloudapp.azure.com秘密キー6 があるのに、同じ DNShoge.japaneast.cloudapp.azure.com秘密キー7 を書き込もうとしており、

「なんで同じ名前のDNS名なのに秘密キーが違うん?」

という状態になっています。なので古い秘密キーの情報を削除する必要があります。で、下から2行目の

hoge.japaneast.cloudapp.azure.com,20.48.99.25 ecdsa-sha2-nistp256 <秘密キー>

を削除することで解決しました。

まとめ

同じDNS名なのに秘密キーが異なるのが問題でした。

  • DNS名を変更する
  • IP アドレスで接続する
  • known_hosts にかかれている古い DNS や 秘密キーを削除する

これらで解決することができます。

イベントや講座などで同じDNS名を使い回す場合は注意が必要だと思いました。

イベントのお知らせ

2021年4月16日 (金) 20:00 ~ 21:00 に Azure Virtual Machines でマインクラフトサーバを構築するハンズオンを行います。マインクラフトをお持ちの方、Azure での仮想マシン作成に興味がある方、ぜひご参加ください!Youtube でも配信するので、寝転がりながらでもご覧いただけます。

mspjp.connpass.com

参考

参考になったサイトです。ありがとうございます。

qiita.com