各ユーザーは、1日あたり15以上のVMを作成して破棄します。 VMは会社の内部OpenStackクラウドに作成されます。
以前に配布されたIPアドレスが新しいvmに割り当てられるたびに、ユーザーは恐ろしいホストキー検証失敗エラーを受け取ります。これは、sshキーがユーザーのIPアドレスと一致しないためですknown_hosts
ファイル。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
xxxxxxxxxxx
Please contact your system administrator.
Add correct Host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA Host key for domain.com has changed and you have requested strict checking.
Host key verification failed.
私が見ることができる2つのソリューションは次のとおりです。
ssh-keygen -R
---(ipAddress
-(ユーザーはこのソリューションに飽きてきています。それ以降、1日に複数回実行されます)このエラーメッセージを回避しながら、安全を確保する方法はありますか?特定のサブネットのみのセキュリティチェックをオフにしますか?
すばらしい機能HostKeyAlias
は問題を解決します:
ssh -o HostKeyAlias=hostkeyalias__vm_2013-05-11_07 user@Host
hostkeyalias__vm_2013-05-11_07
にエントリknown_hosts
(IPなし)を作成します。もちろん、各ssh呼び出しの前にこの値を設定するスクリプトまたはシェル関数を書くこともできます。または、シェル変数を使用します。
HOSTKEYALIAS=hostkeyalias__vm_2013-05-11_07
ssh -o HostKeyAlias=$HOSTKEYALIAS user@Host
VMが変更されるたびに$HOSTKEYALIAS
を変更します。古いエントリはknown_hosts
から随時削除する必要があります。
作成~/.ssh/config
と内容:
Host *
StrictHostKeyChecking no
または、sshのエイリアスを作成して以下を行うことができます。
ssh -o StrictHostKeyChecking=no
問題は、ssh
がIPアドレスとホスト間の1対1のマッピングを想定していることです。クラウドサーバーのIPアドレスのマッピングonlyを解除する必要があります。
次のスタンザを~/.ssh/config
ファイルに追加します。
# Disable HostKey checking for servers which frequently change keys
Host 172.16.24.32 172.16.24.33 172.16.24.34
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
IPアドレスを変更するだけで完了です。¹
これを192.168/16などのネットブロックに適用する場合は、次のようにワイルドカードを使用できます。
# Do not keep HostKeys for internal networks.
Host 10.*.*.* 192.168.*.*
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
元の質問ではIPアドレスについて説明しましたが、もちろん、代わりにホスト名を使用することもできます。たとえば、これはssh instance32.vm.yoyodyne.com
と一致します。
Host *.vm.yoyodyne.com
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
ホスト名とIPアドレスの両方を使用する場合、SSHは解決済み IPアドレスで一致しないため、両方を明示的に指定する必要があります。たとえば、ssh ourvm.local
のショートカットとしてssh 192.168.1.53
がある場合:
Host 192.168.1.53 ourvm.local
UserKnownHostsFile /dev/null
StrictHostKeyChecking no
ssh
のセキュリティモデルを回避する場合は注意が必要です。特に、ワイルドカードがHostKeysが変更されない本物のサーバーと一致しないことを再確認してください。
¹ なぜ/ dev/nullなのですか? StrictHostChecking no
を設定するだけで警告が削除されるが、接続を拒否するため、KnownHostsデータをビットバケットにスローしています。これはばかげているので、OpenSSHによって最終的に動作が変更されるか、新しいオプションが追加されると思います。より良い解決策が出てきたら、この答えを更新します。
VMコンソールから新しいホストキーを取得し、インスタンスの起動後に既知のホストファイルを更新できます。