web-dev-qa-db-ja.com

SSHキーの厳密なチェックをオフにする

各ユーザーは、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日に複数回実行されます)

このエラーメッセージを回避しながら、安全を確保する方法はありますか?特定のサブネットのみのセキュリティチェックをオフにしますか?

8
spuder

すばらしい機能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から随時削除する必要があります。

15
Hauke Laging

作成~/.ssh/configと内容:

Host *
    StrictHostKeyChecking no

または、sshのエイリアスを作成して以下を行うことができます。

ssh -o StrictHostKeyChecking=no
9
Douglas Land

問題は、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アドレスを変更するだけで完了です。¹

オプション: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によって最終的に動作が変更されるか、新しいオプションが追加されると思います。より良い解決策が出てきたら、この答えを更新します。

3
hackerb9

VMコンソールから新しいホストキーを取得し、インスタンスの起動後に既知のホストファイルを更新できます。

0
Lorin Hochstein