😶‍🌫️

Windowsでsshのキー変更エラーを出さないように設定

2025/02/04に公開

前置き

WindowsでLinux等にssh接続するならおおよそTeratermですが、個人的にコマンドプロンプト経由のOpenSSHも捨てがたいです。
(Teratermのあの the ターミナルです みたいなフォントがちょっと見にくくて苦手
🤖<フォント替えればいいのに は言わないお約束。)

他記事で書いている通りVagrantで作っては捨て作っては捨てをしているので、SSHの
「@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @」
が起きて毎回「known_hosts」を消しに行くのがちょっと面倒だったので回避策を備忘録的に書いておきます。

(今回は同一LAN内、かつ検証環境セグメントに絞って設定するのでほぼ問題ありませんが、クラウド上のサーバー等中間者攻撃を受けかねない環境であればセキュリティ上のリスクになります。ご認識おきください。)

本題

とりあえず結論

%USERPROFILE%\.ssh\configに下記設定を入力する。

Host XX.XX.XX.*
  UserKnownHostsFile nul
  StrictHostKeyChecking no

例えば「10.255.255.100~199」を検証環境セグメントとしているなら

Host 10.255.255.1*
  UserKnownHostsFile nul
  StrictHostKeyChecking no

となります。

中身の話

ssh_configに設定を入れて、鍵変更を出させないみたいなのはLinuxでもよくある話なので、Windowsでの差分だけ書きます。

まず、Linuxでは~/.ssh/configなり/etc/ssh/ssh_configなりに書きますが、Windowsでは%USERPROFILE%\.ssh\configに書きます。

そもそもUserKnownHostsFileでknown_hostsを指定しています。
Linuxなら/dev/null等々に投げればよいですが、Windowsには/dev/nullがありません。

C++ではよくある話(らしい)ですが、NULというのが代わりに用意されています。
なのでUserKnownHostsFile nulとします。

(ちなみにnulという名前のファイルは作れない様子)

ただし、known_hostsとの比較が出来ないと、このキー(フィンガープリント)を許可するかという対話が発生します。

それすら面倒になった時のために、StrictHostKeyChecking noをつけています。

Discussion