sshが許可を求めないようにする方法は?


58

RACインストール用のOracleノードのインストールを高速化しようとしています。これには、sshをインストールして構成し、パスワードの入力を求めないようにする必要があります。

問題は次のとおりです。最初の使用時に、

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

それを回避する方法はありますか、またはすべてのサーバーからすべてのサーバーに手動で少なくとも1回接続する運命にありますか?

回答:


91

ファイルに設定StrictHostKeyChecking noします/etc/ssh/ssh_config。これは、サーバー上のすべてのユーザーが使用するグローバルオプションになります。または、~/.ssh/configファイルに設定します。現在のユーザーのみのデフォルトになります。または、コマンドラインで使用できます:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

これがどのように機能するかの説明ですman ssh_config (またはこの最新バージョンを参照してください):

StrictHostKeyChecking

      このフラグが「yes」に設定されている場合、sshはホストキーを$HOME/.ssh/known_hostsファイルに自動的に追加せず、ホストキーが変更されたホストへの接続を拒否します。これにより、トロイの木馬攻撃に対する最大限の保護が提供され/etc/ssh/ssh_known_hostsますが、ファイルのメンテナンスが不十分な場合や、新しいホストへの接続が頻繁に行われる場合は迷惑になります。このオプションにより、ユーザーは強制的にすべての新しいホストを手動で追加します。このフラグが「no」に設定されている場合、sshユーザーの既知のホストファイルに新しいホストキーを自動的に追加します。このフラグが「ask」に設定されている場合、ユーザーが本当にしたいことをユーザーが確認した後にのみ、新しいホストキーがユーザーの既知のホストファイルに追加され、 sshはホストキーが変更されたホストへの接続を拒否します。既知のホストのホストキーは、すべての場合に自動的に検証されます。引数は「yes」、「no」、または「ask」でなければなりません。デフォルトは「確認」です。


1
+1、私もこれはサーバー用です。そして、明確にするために、質問のメッセージは、サーバーからではなく、接続しているクライアントコンピューター上のsshクライアントからのものです。
パトコスチャバ

3
この答えは、作成におけるセキュリティ問題のように聞こえます。
SunSparc

25

ssh-keyscan -ssh公開鍵を収集する

接続するホストのリストがすでにわかっている場合は、次のコマンドを発行できます。

ssh-keyscan host1 host2 host3 host4

-Hsshデフォルトのように結果をハッシュするオプションを与えることができます

また、あなたが与えることができ-t keytypeキータイプがあるdsarsaまたはecdsaあなたは、デフォルトの代わりにつかむためにキーのタイプについての好みを持っている場合。

実行ssh-keyscanすると、known-hostsファイルが事前に設定されているため、新しいキーを追加する許可を求めるsshはありません。


1
「事前に入力される」コメントについて少し困惑しています。これを実行した後、known_hostsは作成または変更されません。内容をファイルにパイプして移入できるということですか?
rschwieb

4
techrepublic.com/article/…で確認していますssh-keyscan -H myhost >> ~/.ssh/known_hosts、または、サーバ全体のために/etc/ssh/ssh_known_hosts
コール

12

各サーバーのknown_hostsにフィンガープリントを追加できます。単一ユーザーの場合:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts

3
ハッシュが導入されたときから、これはもはや正しい方法ではありません。
Deim0s

10

ホストを無視

HostKeyCheckingを無視します。このために私は例えばを使用します:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@example.net

ホストを追加

.ssh/known_hosts最初の接続の前に、ホスト/サーバーの指紋を追加します。これはより安全な方法です。


こんにちは。Oracleはsshコマンドを発行するため、これを実行する方法を制御できません。
ニコラスデフォントネ

賛成。私が見た答えのほとんどは、既知のホストファイルを無効にするdevの言及を見逃しています。これにより、コマンドがはるかに使いやすくなり、既存の構成が損なわれることはありません。
アレックス

(2)確かに、既知のhostsファイルに指紋を追加するのが理想的なアプローチですが、どのように行うのでしょうか?(1)ユーザーが既知のホストファイルをに設定することが有益なのはなぜ  /dev/nullですか?ssh -oStrictHostKeyChecking=no user@example.netサーバーの指紋を$HOME/.ssh/known_hostsファイルに取得するために一度行うと、確認の要求なしに後続の接続が続行されますか?
G-Manが「Reinstate Monica」と言う

3

試す前に次のスニペットを実行します。

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps:厳密には本番サーバーではなく、ManInMiddleに注意してください


0

しかし、これがあなたが定期的に接続する予定のホストである場合、私は〜/ .ssh / configにエントリを作成します(ファイルが存在しない場合は作成します)。

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.