ChromeOS – ChromebookからSSH known_hostsを削除する


Chromebookはブラウザ1枚で仕事が捗る

私はもう2年近くChromebookで仕事をしています。会社のインフラはほぼ全てOffice365ですし、LinuxマシンへのSSH接続もChromeのアプリをブラウザのタブから実行できたりするので、場所を選ばず開発や運用、顧客サポートもこれ1台でこなせます。

ところで、あるホストにSSHするときに、同じホスト名でIPアドレスが変わったりするなどしてこのようなメッセージが表示されるのを見たことがある人も多いのではないでしょうか。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

SSHクライアントがLinuxやUNIXであれば、

ssh-keygen -R <HOST>

するなり ${HOME}/.ssh/known_hosts から該当行を削除するなりして再接続すればよいのですが、ChromebookのSSHクライアントではこの方法が取れません。

ASUS Chromebook Flip ノートパソコン C100PA/Chrome OS/10.1型/Quad-Core RK3288C/2G/eMMC 16GB/タッチ/C100PA-RK3288

ChromebookをSSHクライアントにするには

Chromebookから他ホストへSSH接続するには、ChromeウェブストアからSecure Shellアプリをインストールします。

それでは、接続してみましょう。今回のエラーを再現するには、予め2台のSSH接続可能なLinuxホストを用意しておき、1台のホストへSSH接続した後にDNSのAレコードを変更すれば再現できます(Chromebookはhostsファイルの編集ができません)。

ChromebookからSSH known_hostsを削除する

あるホストのIPアドレスが変わった場合、先程のエラーがSSHクライアントに表示されます。ChromeのSecure Shellアプリの場合、こんな感じで再接続か別の接続、またはアプリの終了を迫られます。

nullpopopo@popotest.example.com に接続しています...
NaCl プラグインを読み込んでいます...完了しました。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for popotest.example.com has changed,
and the key for the corresponding IP address 133.242.xxx.xxx
is unknown. 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.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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:eHTAGc6qwpr/5xHigGO9h25mKdfGUPgXRtPOCt2ANio.
Please contact your system administrator.
Add correct host key in /.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /.ssh/known_hosts:4
ECDSA host key for popotest.example.com has changed and you have requested strict checking.
Host key verification failed.
NaCl プラグインが終了しました(ステータス コード 255)。
再接続(&R)、別の接続を選択(&C)、または終了(&X)
 失敗しました

ここで、以下の行に注目します。

Offending ECDSA key in /.ssh/known_hosts:4

ここで known_hosts の4行目にある公開鍵を消すため、「Ctrl + Shift + J」キーを押してJavaScriptコンソールを起動します。

ここでコンソールに次のコマンドを入力し、Enterキーを押して実行します。

term_.command.removeKnownHostByIndex(4);

カッコの中の数字はknown_hostsで怒られた該当行の数字です。ちまちま1行ごとに消すのが面倒であれば、以下のように全行削除することもできます。

term_.command.removeAllKnownHosts();

このように

done: [object ProgressEvent]

と表示されればOKです。それではもう一度接続してみましょう。

known_hostsが削除されたので、あらためて公開鍵をknown_hostsへ登録するかどうかを聞かれます。このホストが信用できるならyesとタイプして接続を続行すると、認証のプロセスへ進み、ログイン後新たにSSHクライアントのknown_hostsへエントリーが追加されます。

ね、簡単でしょう?