マシンに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.
自動的に「はい」と言う方法、またはこれを無視する方法はありますか?
Sshクライアントに応じて、コマンドラインでStrictHostKeyCheckingオプションをnoに設定したり、nullのknown_hostsファイルにキーを送信したりできます。すべてのホストまたは特定のIPアドレスまたはホスト名のセットのいずれかに対して、構成ファイルでこれらのオプションを設定することもできます。
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no
編集
@IanDunnが指摘しているように、これを行うにはセキュリティ上のリスクがあります。接続しているリソースが攻撃者になりすまされている場合、宛先サーバーのチャレンジをリプレイして、実際にそのリソースに接続している間にリモートリソースに接続していると思わせてしまう可能性があります。あなたの資格情報。 HostKeyCheckingをスキップするように接続メカニズムを変更する前に、それが適切なリスクであるかどうかを慎重に検討する必要があります。
参照 。
より良い答えに値する古い質問。
StrictHostKeyChecking
(これは安全ではありません)を無効にすることなく、対話型プロンプトを防ぐことができます。
次のロジックをスクリプトに組み込みます。
if [ -z `ssh-keygen -F $IP` ]; then
ssh-keyscan -H $IP >> ~/.ssh/known_hosts
fi
サーバーの公開鍵がknown_hosts
にあるかどうかを確認します。そうでない場合は、サーバーに公開鍵を要求し、known_hosts
に追加します。
このようにして、中間者攻撃にさらされるのは1回だけで、次の方法で軽減できます。
無効化(または無効化を制御)するには、次の行を/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 を参照
~/.ssh/known_hosts
が書き込み可能であることを確認してください。それは私のためにそれを修正しました。
これを実行する最善の方法は、「StrictHostKeyChecking」に加えて「BatchMode」を使用することです。このようにして、スクリプトは新しいホスト名を受け入れ、known_hostsファイルに書き込みますが、yes/noの介入は不要です。
ssh -o BatchMode=yes -o StrictHostKeyChecking=no [email protected] "uptime"
通常 '〜/ .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キーへのパスです
これは私と私のスクリプトでうまくいきます。幸運を祈ります。
この警告はセキュリティ機能のために発行されます。この機能を無効にしないでください。
一度だけ表示されます。
2回目の接続後も表示される場合、問題はおそらくknown_hosts
ファイルへの書き込みにあります。この場合、次のメッセージも表示されます。
Failed to add the Host to the list of known hosts
ファイルのパーミッションをユーザーの書き込み可能に変更する所有者を変更することで修正できます。
Sudo chown -v $USER ~/.ssh/known_hosts
Coriの回答を参照して、私はそれを修正し、機能する以下のコマンドを使用しました。 exit
がなければ、残りのコマンドは実際にはリモートマシンにログを記録していましたが、スクリプトでは必要ありませんでした
ssh -o StrictHostKeyChecking=no user@ip_of_remote_machine "exit"
これを行う-> chmod +w ~/.ssh/known_hosts
。これにより、~/.ssh/known_hosts
のファイルに書き込み許可が追加されます。その後、リモートホストは、次回接続するときにknown_hosts
ファイルに追加されます。
通常、この問題は、キーを頻繁に変更するときに発生します。サーバーによっては、生成してサーバーに貼り付けた新しいキーを更新するのに時間がかかる場合があります。そのため、キーを生成してサーバーに貼り付けた後、3〜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_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ページ を参照してください。
これらを/ etc/ssh/ssh_configに追加します
Host *
UserKnownHostsFile=/dev/null
StrictHostKeyChecking=no
ホストサーバーでこれを実行します。これは予感の問題です
chmod -R 700 ~/.ssh