web-dev-qa-db-ja.com

ssh:ホスト 'hostname'の信頼性を確立できません

マシンにsshすると、いつかこのエラー警告が表示され、「はい」または「いいえ」と言うように求められます。これは、自動的に他のマシンにsshするスクリプトから実行するときに、いくつかの問題を引き起こします。

警告メッセージ:

The authenticity of Host '<Host>' can't be established.
ECDSA key fingerprint is    SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'pc' (ECDSA) to the list of known hosts.

自動的に「はい」と言う方法、またはこれを無視する方法はありますか?

139
Senthil A Kumar

Sshクライアントに応じて、コマンドラインでStrictHostKeyCheckingオプションをnoに設定したり、nullのknown_hostsファイルにキーを送信したりできます。すべてのホストまたは特定のIPアドレスまたはホスト名のセットのいずれかに対して、構成ファイルでこれらのオプションを設定することもできます。

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no

編集

@IanDunnが指摘しているように、これを行うにはセキュリティ上のリスクがあります。接続しているリソースが攻撃者になりすまされている場合、宛先サーバーのチャレンジをリプレイして、実際にそのリソースに接続している間にリモートリソースに接続していると思わせてしまう可能性があります。あなたの資格情報。 HostKeyCheckingをスキップするように接続メカニズムを変更する前に、それが適切なリスクであるかどうかを慎重に検討する必要があります。

参照

116
cori

より良い答えに値する古い質問。

StrictHostKeyChecking(これは安全ではありません)を無効にすることなく、対話型プロンプトを防ぐことができます。

次のロジックをスクリプトに組み込みます。

if [ -z `ssh-keygen -F $IP` ]; then
  ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi

サーバーの公開鍵がknown_hostsにあるかどうかを確認します。そうでない場合は、サーバーに公開鍵を要求し、known_hostsに追加します。

このようにして、中間者攻撃にさらされるのは1回だけで、次の方法で軽減できます。

  • スクリプトが安全なチャネルを介して初めて接続することを保証する
  • ログまたはknown_hostsを検査してフィンガープリントを手動で確認します(一度だけ実行されます)
67

無効化(または無効化を制御)するには、次の行を/etc/ssh/ssh_config...の先頭に追加します。

Host 192.168.0.*
   StrictHostKeyChecking=no
   UserKnownHostsFile=/dev/null

オプション:

  • ホストサブネットを*にして、すべてのIPへの無制限のアクセスを許可できます。
  • グローバル構成の場合は/etc/ssh/ssh_configを、ユーザー固有の構成の場合は~/.ssh/configを編集します。

http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-Host-key-checking.html を参照してください

Superuser.comでの同様の質問- https://superuser.com/a/628801/5516 を参照

33
Jim Fred

~/.ssh/known_hostsが書き込み可能であることを確認してください。それは私のためにそれを修正しました。

15
richard

これを実行する最善の方法は、「StrictHostKeyChecking」に加えて「BatchMode」を使用することです。このようにして、スクリプトは新しいホスト名を受け入れ、known_hostsファイルに書き込みますが、yes/noの介入は不要です。

ssh -o BatchMode=yes -o StrictHostKeyChecking=no [email protected] "uptime"
11
Cory Ringdahl

通常 '〜/ .ssh/config'にある設定ファイルを編集し、ファイルの最初に以下の行を追加します

Host *
    User                   your_login_user
    StrictHostKeyChecking  no
    IdentityFile          ~/my_path/id_rsa.pub

your_login_userに設定されたユーザーは、この設定がyour_login_userに属していると言います
StrictHostKeyCheckingをnoに設定すると、プロンプトが回避されます
IdentityFileはRSAキーへのパスです

これは私と私のスクリプトでうまくいきます。幸運を祈ります。

10
Carlos M G T

この警告はセキュリティ機能のために発行されます。この機能を無効にしないでください。

一度だけ表示されます。

2回目の接続後も表示される場合、問題はおそらくknown_hostsファイルへの書き込みにあります。この場合、次のメッセージも表示されます。

Failed to add the Host to the list of known hosts 

ファイルのパーミッションをユーザーの書き込み可能に変更する所有者を変更することで修正できます。

Sudo chown -v $USER ~/.ssh/known_hosts
6
Sfisioza

Coriの回答を参照して、私はそれを修正し、機能する以下のコマンドを使用しました。 exitがなければ、残りのコマンドは実際にはリモートマシンにログを記録していましたが、スクリプトでは必要ありませんでした

ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"
4

これを行う-> chmod +w ~/.ssh/known_hosts。これにより、~/.ssh/known_hostsのファイルに書き込み許可が追加されます。その後、リモートホストは、次回接続するときにknown_hostsファイルに追加されます。

3
Akshayraj Kore

通常、この問題は、キーを頻繁に変更するときに発生します。サーバーによっては、生成してサーバーに貼り付けた新しいキーを更新するのに時間がかかる場合があります。そのため、キーを生成してサーバーに貼り付けた後、3〜4時間待ってから試してください。問題を解決する必要があります。それは私と一緒に起こりました。

2
mk..

理想的には、自己管理の認証局を作成する必要があります。キーペアの生成から始めます:ssh-keygen -f cert_signer

次に、各サーバーの公開ホストキーに署名します:ssh-keygen -s cert_signer -I cert_signer -h -n www.example.com -V +52w /etc/ssh/ssh_Host_rsa_key.pub

これにより、署名された公開ホスト鍵が生成されます:/etc/ssh/ssh_Host_rsa_key-cert.pub

/etc/ssh/sshd_configで、HostCertificateがこのファイルを指すようにします:HostCertificate /etc/ssh/ssh_Host_rsa_key-cert.pub

Sshdサービスを再起動します:service sshd restart

次に、SSHクライアントで、次を~/.ssh/known_hostsに追加します。@cert-authority *.example.com ssh-rsa AAAAB3Nz...cYwy+1Y2u/

上記には以下が含まれます。

  • @cert-authority
  • ドメイン*.example.com
  • 公開鍵の完全な内容cert_signer.pub

cert_signer公開キーは、cert_signer秘密キーによって署名された公開ホストキーを持つサーバーを信頼します。

これには、クライアント側で1回限りの構成が必要ですが、まだプロビジョニングされていないサーバーを含め、複数のサーバーを信頼できます(つまり、各サーバーに署名する限り)。

詳細については、 このwikiページ を参照してください。

1
Robert Chen

これらを/ etc/ssh/ssh_configに追加します

Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
1
Kevin Nguyen

ホストサーバーでこれを実行します。これは予感の問題です

chmod -R 700 ~/.ssh
0
Robert A