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


218

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

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


6
Lekensteynの答えは優れており、正しいですが、sshは「yes」を期待しyes、「y」を出力するので、幸運があったかもしれないことに注意したいだけですfor h in $SERVER_LIST; do yes yes | ssh $h "uptime"; done(余分なyesに注意してください。 ")。
chazomaticus

回答:


240

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

10
これは、組み込みのセキュリティツールをバイパスするため、最適なソリューションではありません。ssh-keyscanお使いのシステムで利用可能な場合は望ましいです。
ステファンLasiewski

2
@StefanLasiewski信頼できないネットワーク上にいる場合、中間者攻撃を許可します。固定ホストへの新しいキーを受け入れる場合、ssh-keyscanアプローチはより健全です。動的/再利用されたIPアドレスを持つ信頼できるネットワーク内のローカル仮想マシンおよびその他のホストの場合、説明したアプローチで十分です。
Lekensteyn

8
2つのソリューションの違いを明確にするssh-keyscanだけです。このソリューションは、一度ssh-keyscan実行されている中間者攻撃のみを受けやすい傾向があります。この-oStrictHostKeyChecking=noソリューションは、ssh実行されるたびに中間者攻撃を受ける傾向があります。
エリックシェールンド16

121

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


1
ソートを実行する| 異なるキーと同じホストにトラブルを意味する可能性があるのでuniqは、その後は、変更されたホストを検出するスクリプトを可能にし、のみについてユーザーに警告するだろう後のawkを使用して重複したホストを探して
レナート・ロラン

2
-Hホスト名とアドレスをハッシュするメモを追加することもできます。
デビッドカレン

25

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

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

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


上記のコマンドを実行し、実際に帯域外で取得したフィンガープリントに対してホストキーをチェックしないと、次とまったく同じ方法で脆弱ですStrictHostKeyChecking no
code_monk

3
@code_monk:いいえ、そうではありません。失敗の1回限りの機会を開きます(間違ったホストからのキーを既知のホストに追加することを受け入れます)。 StrictHostKeyChecking noを指定すると、他のマシンの繰り返し受け入れが許可されます。
ティンク

0

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

ファイルサーバーリストにサーバー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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.