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


153

マシンに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.

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


27
これはお勧めしません。なぜこれらのエラーが発生するのかを解明する必要があります。そうしないと、これらのエラーがユーザーを保護しようとしている、中間者攻撃に自分を開放してしまいます。
Peter Bagnall 2013年

3
これは、そのsshキーを使用するサーバーの変更が原因である可能性があります。または、ユーザーとサーバーの間に座って送受信するすべてをリッスンしている誰かが原因である可能性があります。
derekdreery 2013年

このエラーの理由は何ですか?
AiU

私はピーターの意見に同意しません。大規模な組織では、他の誰かにそのような問題を修正させようとするだけで、仕事を終わらせようとするのは現実的ではありません。
Sridhar Sarnobat

多くの大規模な組織は、@ SridharSarnobatの提案とは正反対です。あなたは持っていることを確認右の人々は問題のこれらの種類を解決するために、それらを回避しようとすると、物事を悪化させます。
James Moore

回答:


135

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

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

編集

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

リファレンス


40
セキュリティへの影響について警告せずにこれを推奨するのは無責任だと思います。superuser.com/a/421084/121091の方がIMOに適しています。
Ian Dunn 2013

5
@IanDunn私は一般的なSSHクライアントの状況であなたに同意しますが、OPがスクリプトの実行中にこの問題が発生していることをOPが明確に示しているので、代替案はホストキーが変更されるたびにスクリプトを壊しています(そして、いくつかの理由があります)それはケースかもしれません)あなたが参照した答えは解決しません。とはいえ、これは有効な批評なので、リスクを指摘するために回答を更新しました。
cori 2013

6
多くの人々がこの回答に賛成し、質問者に受け入れられたとは信じられません。このアプローチは、セキュリティチェックをバイパスし、リモートホストに接続します。〜/ .ssh /フォルダーのknown_hostsファイルに書き込み権限があるかどうかを確認します。そうでない場合は、この回答を使用してください。stackoverflow.com
ARK

あなたが何をしているかを知っている限り、これは最良の解決策です。私たちが自動的に接続する内部Webサイトがあり、そのIPアドレスは(事実上ランダムに)更新されています。これを〜/ .ssh / configに追加したところ、問題なく動作しました。心に留めておいてください。このサイトは私がそう思っているものであり、そうでない場合でも、転送されているデータを知っているので、悪者には利点がありません。
user1683793

75

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

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

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

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

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

このようにして、中間者攻撃に1回だけさらされることになります。

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

4
または、インフラストラクチャ構成設定の一部として、すべてのマシンのknown_hostsファイルを管理します。
Thilo、2015

1
ssh-keyscanはProxyCommandでは機能しないことに注意してください:marc.info/
l=

1
期待どおりに動作しません。`ssh-keygen -F $IP`は"`ssh-keygen -F $IP`"(引用符で
囲む

またはssh-kegen戻り値を使用してonelinerとして:ssh-keygen -F $IP >/dev/null || ssh-keyscan -H $IP >> ~/.ssh/known_hosts
Gohu

38

無効化(または無効化を制御)するには、次の行を/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/55163を参照


19

~/.ssh/known_hosts書き込み可能であることを確認してください。これで解決しました。


4
誰もがknown_hostsに書き込むことを許可することは安全ですか?
akaRem 2015

2
@akaRem間違いなく。通常は、その.sshフォルダーを所有するユーザーにのみ書き込み可能にする必要があります。
2rs2ts 2015

権限0400は最適です(誰でも修正してください)。ただし、私の場合、問題は.ssh、ユーザーのフォルダーの所有権が変更され、自分の0400権限が無効になることでした。sudo所有権を私に戻すと、問題は解決しました。
Charney Kaye

これで問題が解決しました。
シバジ

14

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

ssh -o BatchMode=yes -o StrictHostKeyChecking=no user@server.example.com "uptime"

10

通常は「〜/ .ssh / config」にある設定ファイルを編集し、ファイルの冒頭に次の行を追加します

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

ユーザーyour_login_userがこの設定がyour_login_userに属していると言う
StrictHostKeyCheckingをnoに設定すると、プロンプト
IdentityFile is RSA keyへのパス

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


本当に助かりました。しかし、最後の行IdentityFileは何ですか?それなしでも動作するようです
。– supersan

7

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

一度だけ表示されます。

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

Failed to add the host to the list of known hosts 

所有者を変更してファイルの権限を変更し、ユーザーが書き込みできるようにすることで修正できます。

sudo chown -v $USER ~/.ssh/known_hosts

5

Coriの回答を参考にして修正し、以下のコマンドを使用しました。なしではexit、残りのコマンドは実際にはリモートマシンにログを記録していましたが、スクリプトでは不要でした。

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

5

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


4

理想的には、自己管理認証局を作成する必要があります。鍵ペアの生成から始めます。 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_configHostCertificateこのファイルをポイントします。 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ページを参照してください


2

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



0

これをホストサーバーで実行すると、予兆の問題になります

chmod -R 700 ~/.ssh

人々にauthorized_keysと公開鍵の許可を644から700に変更するように求めていますか?そして、秘密鍵は600から700ですか?
ヌレティン

0

私は同じエラーを抱えていて、私に起こったばかりのように、誤った特権を持っているかもしれないという事実に注意を向けたいと思いました。ディレクトリを通常またはユーザーとして
設定しているため、正しいユーザーである必要があります。このエラーが表示されたとき、私は通常のユーザーとして構成しました。終了すると修正されました。.sshrootroot.sshroot


-3

以下のエラーが発生する問題を解決します:
エラー:
ホスト 'XXX.XXX.XXX'の信頼性を確立できません。
RSAキーフィンガープリントは09:6c:ef:cd:55:c4:4f:ss:5a:88:46:0a:a9:27:83:89です。

解決策:
1. openSSHツールをインストールします。
2.コマンドsshを実行します。3
.このホストを追加するように要求されます。YESを受け入れます。
4.このホストは既知のホストリストに追加されます。
5.これで、このホストに接続できます。

このソリューションは現在機能しています......


これは質問の答えにはなりません。元の(非常に古い)質問は、スクリプトを介してそのようなプロンプトを自動的に確認する機能に関するものでした。
MasterAM 2013

それが彼のために働いたなら、多分それは他のために働く。実際に役立つものに反対票を投じる必要はありません
Mbotet

「ssh」を実行しても機能しません。オプションの使用方法を示しています:ssh [..] [..] [..] [user @] hostname [command]
P Satish Patro
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.