「ホストキーの検証に失敗しました…」エラーによるSSH接続の問題


179

LAN内の別のUbuntuマシンにSSH経由で接続できます。両方のPCにopenssh-serverをインストールしました が、別のUbuntuコンピューターからSSH経由でPCに接続できず、このエラーが発生しました:

ホストキーの検証に失敗しました...


1
ホスト名またはIPアドレスを使用していますか?
トールビョーンラウンアンデルセン

似ていますが、私は同じエラーを得たが、原因別の問題にありません:serverfault.com/questions/494916/...
zengr

これはUbuntu固有の問題ではありません。sshコマンドラインからのいずれかで発生する可能性があります。
-MarkHu

回答:


216

「ホストキーの検証に失敗しました」は、リモートホストのホストキーが変更されたことを意味します。

SSHは、リモートホストのホストキーをに保存します~/.ssh/known_hosts。そのテキストファイルを手動で編集して古いキーを削除するか(エラーメッセージで行番号を確認できます)、または

ssh-keygen -R hostname

以下からのmanページ

-R hostname hostnameに
属するすべてのキーをknown_hostsファイルから削除します。このオプションは、ハッシュされたホストを削除するのに便利です。

(これは私は答えから学んだことは 、それはSSHのknown_hostsファイルから特定のホストキーを削除することは可能ですか?)。


4
また、単にリモートホストのホストキーがないことも意味します。たとえば、Iの場合rm ~/.ssh/*ssh -o BatchMode=yes root@somewhere他に何も問題がHost key verification failed. ない場合、常に対話型であるが重要ではないが、同じエラーが発生したスクリプトに関連する場合は重要ではありません。
ロン・バーク

当然、がssh-keygen -R example.net:7999得られHost example.net:7999 not found in known_hostsます。
アレックス

known_hostsファイルとsshを再び削除しました。動いた。
ParisaN

ファイルが~/.ssh/known_hosts読めない
ジョアン・ピメンテル・フェレイラ

128

ホストキーへのプロンプトへのインタラクティブなアクセスができない特定のリモート/スクリプトの状況で実行している場合、次のように回避してください:

$ ssh -o StrictHostKeyChecking=no user@something.example.com uptime

警告:既知のホストのリストに「something.example.com、10.11.12.13」(RSA)を永続的に追加しました。


6
+1、これはい解決策ですが、動的IP接続デバイスで動作する自動化された監視プロセスの場合には、これは単純で受け入れ可能な解決策です。
ニンシュオ

11
+1たとえば、ジェンキンスの処刑の場合、これは良い解決策です。ありがとう
ロボ

5
@ロボはこれ以上同意することはできません、私はジェンキンのためにそれを使用しています、それはクールですsh """ssh -o StrictHostKeyChecking=No ec2-user@someIpAddress-e2e sudo service tomcat restart"""
-prayagupd

私の命を救いました。命の恩人ソリューション。
ユーザー1735921

10

また、シリアルコンソールで作業しているときに、冗長モードで上記のコマンドをチェックすると、存在しているのに存在しない-vことが示される場合/dev/ttyがあります。

ssh -v user@hostname

上記の場合/dev/tty/dev/ttyS0toのシンボリックリンクを削除して作成し/dev/ttyます。

rm /dev/tty
ln -s /dev/ttyS0 /dev/tty

別の方法として、id_rsa.pubリモートの場所に追加して、パスワードが要求されないようにし、ログインアクセスを取得します。


6
+1 -vパラメーターの使用を推奨するため。これは、sshの問題をデバッグするときに非常に役立ちます。
ダニエルクルマン

8

私の場合、これはudevの問題が原因でした- /dev/ttyデバイスノードがありませんでした。私にとっての解決策はただ:

sudo mknod -m 666 /dev/tty c 5 0

6

ターミナルで:

ssh -o StrictHostKeyChecking=no -i YourPublicKey.pem user@example.com uptime

次のメッセージまたは類似のメッセージが表示されます。

Warning: Permanently added 'example.com, XX.XXX.XXX.XX' (ECDSA) to the list of known hosts.
 00:47:37 up 3 min,  0 users,  load average: 0.00, 0.00, 0.00

次に、通常どおりEC2に接続します。

ssh -i YourPublickey.pem user@example.com

私が得たcommand-line line 0: Bad yes/no/ask argument.あなたが誤って引数としてに「いいえ」の代わりに「いいえ」のを使用しないためStrictHostKeyChecking
アクセルBregnsbo

3

それは、2番目のubuntuがパスワードではなくキーによる接続を必要とするからです。

sudo dpkg-reconfigure openssh-serverPCで使用することをお勧めします。そうすれば、正常に動作するはずです。opensshの構成をリセットし、デフォルトのパスワード認証に戻るはずです。

2番目の可能性は、PCに他のUbuntuのキーが既にあり、それが変更されたためにもう認識されないことです。この場合、ファイル.ssh/authorized_keysを編集して、ubuntuを識別する問題のある行を削除する必要があります。


3

これは古いスレッドで、この答えに出くわしました。これを解決するために行ったことを追加します。

ssh-keygen -f "/home/USER/.ssh/known_hosts" -R HOSTNAME

私はそれが私に投げたエラーメッセージを見て、ホストのリストからそれを削除するためにそのコマンドを実行するように言った。その後、次のことを行いました。

ssh-copy-id HOSTNAME

サーバーにsshできるまで、そこからプロンプトに従いました。


このコマンドとして、ubuntu 12.4で提案として得ています。
MaNKuR

2

リモートホストキーが変更されたことを意味します(ホストパスワードの変更の可能性があります)。

端末は、このコマンドをrootユーザーとして実行することを提案しました

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231

そのホスト名をpc / serverのホストリストから削除する必要があります。その推奨コマンドをコピーして、rootユーザーとして実行します。

$ sudo su                                                            // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]:4231   // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                               // Exist from root user

$ sudo ssh root@www.website.net -p 4231                              // Try again

これがうまくいくことを願っています。


1

この方法でキーを変更する必要があります:指定されたエラーから、たとえば変更されたホストキーを見つけます:/Users/user-name/.ssh/known_hosts:5の問題のあるECDSAキーは、5番目のキーが変更されたので、これを行います:

sed -i '5d' ~/.ssh/known_hosts

注意:rootになるか、sudoの特権が必要です。


いいえ、あなたが他の誰かのためにそれをしているのでない限り、rootもsudoも必要としません。ホームディレクトリのファイルを編集しています。2番目:コマンドが機能するには、GNU sedが必要です。
テクラフ

たぶんあなたは正しいかもしれませんが、私はMac OSXからubuntu-serverにsshしようとしましたが、それをしなければなりません。ところでコメントありがとうございます。
Amir.AG

1

/home/user/.ssh/known_hostsこれをターゲットで実行して、ターゲットホストのrsaキーをソースホストに配置する必要があります

ssh-keyscan -t rsa @targethost

1

sshが接続を続行することを確認したときに「yes」と入力するだけでよい場合があります。

以下のように。

The authenticity of host 'xxx' can't be established.
ECDSA key fingerprint is yyy.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'xxx' (ECDSA) to the list of known hosts.
Enter passphrase for key '/Users/ysy/.ssh/id_rsa':

次に、パスワードを入力します。

「接続を続行してもよろしいですか(はい/いいえ)?はい」に注意してください。入力せずに、yesと入力する必要があります。


1

ホストキーチェックを厳密に無効にする以外に、次のように入力して接続することもできます。

ssh -o LogLevel=quiet -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no <username@target_machine_ip_or_domain_name>

0

pico ~/.ssh/known_hosts 再接続するとすべての行が削除され、新しいキーが取得されます。


6
ホストキーをすべて削除するため、これは危険なソリューションです。受け入れられている解決策のssh-keygen -R hostname方が優れています。
msanford 14年

0

私の解決策はこのブログ投稿から来ています:SSH Secure Shell Clientのアルゴリズムネゴシエーションに失敗しました

次のようにファイルを変更する必要があります。

sudo nano /etc/ssh/sshd_config

そして、次を追加します。

# Ciphers
Ciphers aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,arcfour
KexAlgorithms diffie-hellman-group1-sha1

基本的に、問題を解決できるものが見つかるまで、さまざまな解決策を試しました。上記の解決策が機能しない場合は、これを試してください。これがうまくいかない場合は、他を試してください。


0

「sudo vi /var/root/.ssh/known_hosts」を実行して、接続して再接続しようとしているホストのキーを保持している行を削除するだけです。

あなたの特定の状況については知りませんが、ほとんどの場合、このエラーには次のようなメッセージが伴います。

my_mac:~ oivanche$ sudo ssh pi@192.168.0.45
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 ECDSA key sent by the remote host is
SHA256:sx1Z4xyGY9venBP6dIHAoBj0VhDOo7TUVCE2xWXpzQk.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /var/root/.ssh/known_hosts:74
ECDSA host key for 192.168.0.45 has changed and you have requested strict checking.
Host key verification failed.

ログをより注意深く読むと、ホストから取得したキーが既に持っているキーと競合していることがわかります。この場合、known_hostsファイルの74行目にあります(/ var /のECDSAキーを無効にします) root / .ssh / known_hosts:74)。known_hostsから行を削除し、変更を保存して再接続します。


-1
chmod 666 /dev/tty 

さらに別のttyソリューションです-時々、このデバイスファイルのパーミッションが間違っています。

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