この小さなユーティリティスクリプトを作成しました。
for h in $SERVER_LIST; do ssh $h "uptime"; done
新しいサーバーが$SERVER_LIST
に追加されると、スクリプトは次のように停止します:
The authenticity of Host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?
yes
を試しました:
for h in $SERVER_LIST; do yes | ssh $h "uptime"; done
運がありません。
ssh
をパラメーター化して、新しいキーを自動的に受け入れる方法はありますか?
たとえば、StrictHostKeyCheckingオプションを使用します。
ssh -oStrictHostKeyChecking=no $h uptime
このオプションは〜/ .ssh/configに追加することもできます。例:
Host somehost
Hostname 10.0.0.1
StrictHostKeyChecking no
ホストキーが変更されると、このオプションを使用しても警告が表示されることに注意してください。
$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 RSA key sent by the remote Host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct Host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found
ホストが頻繁に再インストールされない場合は、-oUserKnownHostsFile=/dev/null
オプションを使用して、これをより安全性の低いものにすることができます(ただし、ホストキーを頻繁に変更する方が便利です)。これにより、受信したすべてのホストキーが破棄されるため、警告は生成されません。
18.04では、新しい可能性があります:StrictHostKeyChecking=accept-new
。 man 5 ssh_config
から:
If this flag is set to “accept-new” then ssh will automatically
add new Host keys to the user known hosts files, but will not
permit connections to hosts with changed Host keys. If this flag
is set to “no” or “off”, ssh will automatically add new Host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.
次のコマンドを使用して、サーバーの指紋をknown_hostsに追加できます。
ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts
注: <ip-address>および<hostname>を、追加するサーバーのIPおよびDNS名に置き換えます。
これの唯一の問題は、known_hostsにいくつかのサーバーが2回存在することです。それは本当に大したことではなく、言及しただけです。重複がないようにするには、最初に次を実行してすべてのサーバーを削除できます。
ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>
だからあなたは実行することができます:
for h in $SERVER_LIST; do
ip=$(Dig +search +short $h)
ssh-keygen -R $h
ssh-keygen -R $ip
ssh-keyscan -H $ip >> ~/.ssh/known_hosts
ssh-keyscan -H $h >> ~/.ssh/known_hosts
done
単に追加し直すために削除する際に留意すべきことの1つは、指紋を検証するセキュリティを本質的に削除することです。したがって、ユーティリティスクリプトを実行する前にこのスクリプトを実行することは絶対に避けたいでしょう。
この応答には少し遅れていますが、稼働時間の収集を実行する前に、新しいマシンでssh-keyscanを実行するのが賢明な方法です。
ssh-keyscan <newhost> >> ~/.ssh/known_hosts
たとえあなたが環境を完全に制御していると思っていても、利便性のために健全性チェックを無効にすることは悪い計画のように思えます。
サーバーのリストを自動的に追加するには、以下を実行できます。
ファイルサーバーリストにサーバーIPを追加する
IPは以下の形式で追加する必要があります。
cat servers-list
の出力
123.1.2.3
124.1.2.4
123.1.2.5
置き換えて上記のIPを変更します。
以下のコマンドは、リストからすべてのサーバーを追加します。
ssh-keyscan -p61 -H "`cat servers-list`" >> ~/.ssh/known_hosts