web-dev-qa-db-ja.com

ssh:キーを自動的に受け入れます

この小さなユーティリティスクリプトを作成しました。

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をパラメーター化して、新しいキーを自動的に受け入れる方法はありますか?

216
Adam Matan

たとえば、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-newman 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.
235
Lekensteyn

次のコマンドを使用して、サーバーの指紋を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つは、指紋を検証するセキュリティを本質的に削除することです。したがって、ユーティリティスクリプトを実行する前にこのスクリプトを実行することは絶対に避けたいでしょう。

119
mhost

この応答には少し遅れていますが、稼働時間の収集を実行する前に、新しいマシンでssh-keyscanを実行するのが賢明な方法です。

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

たとえあなたが環境を完全に制御していると思っていても、利便性のために健全性チェックを無効にすることは悪い計画のように思えます。

24
tink

サーバーのリストを自動的に追加するには、以下を実行できます。

ファイルサーバーリストにサーバー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
0
Waqas Khan