ECDSAホスト鍵に関する警告を修正する方法


232

UbuntuサーバーでパスワードなしのSSHを設定しようとしています ssh-copy-id myuser@myserverしかし、私はエラーを得ています:

警告: 'myserver'のECDSAホストキーはIPアドレス '192.168.1.123'のキーと異なります

何が原因で、それをどのように修正しますか?削除してみた .ssh リモートマシン上のディレクトリ、および実行中 ssh-keygen -R "myserver" しかし、これはエラーを解決しません。


私の場合は、ドメインとバインドするサーバー(IP)を The ECDSA host key for server has changed。私の方法は、ドメインに関する関連キャッシュ文字列を削除することです ~/.ssh/known_hosts。それからsshが動作します。
Ninja

回答:


342

のキャッシュされたキーを削除します 192.168.1.123 ローカルマシン上:

ssh-keygen -R 192.168.1.123

12
自宅からSSH接続するときに職場で新しくインストールされたDebianサーバで私には働きませんでした。また、答えはかなり簡潔です。
Chris K

/home/wf/.ssh/known_hostsが更新されました。元の内容は/home/wf/.ssh/known_hosts.oldとして保持されていました「警告:IPアドレス「x.x.x.x」のECDSAホストキーを既知のホストのリストに永久に追加しました。表示されています。そしてそれはうまくいくようです
Wolfgang Fahl

11
あなたはそれを削除する代わりに更新することができます。つかいます ssh-keyscan -t ecdsa my.server.domain >> ~/.ssh/known_hosts その後は、最初にホストに接続するときに新しいキーを検証する必要はありません。
Alex

1
私はそれを機能させることに成功していません。アドレス(vpsxxx.ovh.net)これらのそれぞれについてssh-keygen -Rが動作しました。
tomsihap

私のために働きました、しかし混乱はどのホストからこのコマンドが実行されるべきであるか?答えはエラーを示したものからです。 2番目の質問と答えはより明白ですが、念のためにどのアドレスをssh-keygen -Rに渡すべきでしょうか。エラーステートメントに含まれるアドレス。
Russ Bateman

47

私の場合 ssh-keygen -R ... 警告を修正しませんでした。私はこのような追加情報を持っていました:

Offending key for IP in /home/myuser/.ssh/known_hosts:8
Matching host key in /home/myuser/.ssh/known_hosts:24

手動で編集しただけです ~/.ssh/known_hosts そして8行目( "問題のあるキー")を削除しました。私は再接続しようとしました、ホストは恒久的に追加されました、そしてその後すべてがうまくいった!


1
魅力のように働きます。これを1行で修正できます sed -e '8d' /home/myuser/.ssh/known_hosts行番号を置き換える 8 システムに表示されているものとファイル名。
Alex P. Miller

15

私は自分のLANコンピュータと私の2つのウェブホスティングアカウントの間でたくさんのやりとりをしています。 ssh -v どこで何が悪かったのかを確認する。

この問題を解決しただけで回答に満足できなかったので、私は自分自身が「なぜ」なのか本当に知りたいと思いました…

私の場合のトリガーは、次のとおりです。職場で新しいサーバーOSをインストールし、openssh-serverパッケージをインストールすると、職場のサーバーで新しいホストキーのセットが生成されました。以前は、私のサーバーOSはすべてUbuntuで、今回はDebianに変更されました(そして、パーミッションに微妙な違いがあるのではないかと思います)。

すべてのOSがUbuntuで、最初にSSHを起動したときにサーバのOSを再インストールすると、この種の警告が表示されます。これは、上記のサイレント警告より優先されます。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
06:ea:f1:f8:db:75:5c:0c:af:15:d7:99:2d:ef:08:2a.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

それから私は開きます 〜/ .ssh / known_hosts sshを起動しているコンピュータで、その行を削除して再接続すると、次のようになります。

chris@home ~ $ ssh work
The authenticity of host '[work]:11122 ([99.85.243.208]:11122)' can't be established.
ECDSA key fingerprint is 56:6d:13:be:fe:a0:29:ca:53:da:23:d6:1d:36:dd:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[work]:11122 ([99.85.243.208]:11122)' (ECDSA) to the list of known hosts.
Linux rock 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64

その約ビット:11122は私がファイアウォールからSSHをルーティングするポート番号です

私は以前のUbuntuサーバーからのバックアップをチェックし、私の新しいDebianインストールと比較しました。

Ubuntu:                                            Debian:
# Package generated configuration file             # Package generated configuration file
# See the sshd(8) manpage for details              # See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for      # What ports, IPs and protocols we listen for
Port 22                                            Port 22
# Use these options to restrict which interface    # Use these options to restrict which interfaces
#ListenAddress ::                                  #ListenAddress ::
#ListenAddress 0.0.0.0                             #ListenAddress 0.0.0.0
Protocol 2                                         Protocol 2
# HostKeys for protocol version 2                  # HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key                  HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key                  HostKey /etc/ssh/ssh_host_dsa_key
------------------------------------------------   HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security    #Privilege Separation is turned on for security
UsePrivilegeSeparation yes                         UsePrivilegeSeparation yes

そうです、おそらく最近、ホストがecdsaキーを使い始めました。最近のUbuntuの変更に基づいて、私はアップデートを非難するでしょう。 Ubuntuが私が頼りにしていた堅実なLinux OSから離れたのは、今回Debianをインストールした理由です。

私は読みました security.SE q / a on ecdsa からすでにその行を削除しています sshd_config 私の新しいDebianサーバ。 (そして走った service ssh restart


2
見栄えのする並列比較ブロックの場合は+1。 「Ubuntuが堅実なLinux OSから移行した」という意味のURLを追加してもらえますか。
bgoodr

@ bgoodrそれは私の意見です。過去数年間に何度か自分のRAIDファイルサーバーを設定したことにのみ基づいています。 / Crap for answer、googlingを始める ubuntu debian server そして、あなたは私の言っていることがわかります
Chris K

1
あなたは、上司です。詳細かつ簡潔な回答をありがとう。
sargas

5

ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.1.123

これにより、known_hosts.oldの下にある既存のキーが置き換えられ、新しいキーが作成されます。 この解決策は同じシナリオで私のために働いた


4

動的アドレス指定を使用するとIPアドレスが常に変わるため、プロンプトが毎回表示されます。静的IPを使用するようにしてください。そうすれば、鍵を一度だけ追加するだけで済みます。


1
良い点、誰かが動的IPを言及したのを見逃していませんか?
Chris K

2

接続に同じユーザーを使用していますか?

あなたがユーザーのようなローカルPCにログインしている場合 ジョン そしてサーバーに接続 B ユーザー様 アドルフ@ B そしてすべてがOKである、それはあなたがユーザーのようにローカルPCにログインしているならすべてがOKであるという意味ではありません ジェーン サーバーへの接続 B ユーザー様 アドルフ@ B

PCからユーザーBedaとしてサーバーBにログインしたい場合 A パスワードなしで、すべてPCからこのコマンドを試してください。 A

ssh-keygen -t rsa

このコマンドはキーを生成してファイルに保存します。お任せください パスフレーズ 空の。

ssh Beda@B mkdir -p .ssh

ディレクトリが存在しない場合、このコマンドはディレクトリを作成します。そうでなければ、エラーメッセージを表示しません。

cd ~/.ssh

このコマンドは、ディレクトリをユーザーのホームディレクトリ./sshに変更します。

cat id_rsa.pub | ssh Beda@B 'cat >> .ssh/authorized_keys'

このコマンドはファイルを印刷します id_rsa.pub (あなたの公開鍵)に authorized_keys サーバー上。

重要:Bedaは接続しているサーバーのユーザー名、BはサーバーのIPです。

これで、パスワードやパスフレーズを使わずにサーバーBに接続できます。

ssh Beda@B

あるいはssh-copy-idを使用して、すべての面倒な手間をかけずに、authorized_keysファイルにid_rsa.pubキーを追加するだけです。
BlakBat

1

スレッド ここに 助けになるかもしれません。

基本的には、そのホストのRSAキーとECDSAキーの両方を削除してから、 ssh-keyscan それらをあなたの元に戻すために known_hosts この競合を引き起こさないような方法でファイルを作成してください。私は同じ問題を抱えていたときそれは私のために働いた。


1

質問:これが原因で何が起こるのでしょうか。

そのため、SSHサーバーのホストキーが変更されました。 何が変わったのですか? 言うのは難しいです。 ここにいくつかの推測があります:

  • myserver上のsshdがECDSAキーを使い始めましたか?それは新しいキータイプですか?
  • myserverは最近再インストールされましたか?
  • 私のサーバーにsshdが最近再インストールされたため、新しいsshホストキーが生成されましたか?
  • 誰かがSSHホストキーを再生成または置き換えましたか?
  • myserverのIPアドレスが変更されたため、別のホストがそのIPアドレスに応答していますか?

質問:...そしてどのように修正すればよいですか。

他の人が既に回答しているので、あなたのアカウントがキャッシュしたmyserverのキャッシュされたECDSAホスト鍵を削除します。


2
良いアドバイスですが、実際には質問に答えません。質問に答えようとさえしません。
boatcoder

1

このエラーは長い間私を悩ませ続けました。どういうわけかそれは私がやるかどうかの違いを生んだ

ssh host

または

ssh host.domain

https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh

それから設定ファイルを変更するオプションを教えてください。私のスクリプトを見る https://askubuntu.com/a/949731/129227 プロセスを自動化するためにあります。


1
構成値を使用する CanonicalizeHostname そして CanonicalDomains 厳密なチェックを削除することを避け、sshがhostとhost.domainを同じものと見なすようにします。
BlakBat

1

私は、〜/ .ssh / configに次の行を追加しました。これにより、すべての.localアドレスに対する厳密なホストチェックが無効になります。 (DHCPアドレス割り当てでは、私のローカルマシンのIPアドレスは常に変化しています)

host *.local
    StrictHostKeyChecking no

あなたはまだ警告を受けます、それは私によって大丈夫です。


0

Secure Shellをアンインストールして再インストールすることで、Chromebookでこれを修正しました。


これはやり過ぎです。ここで私の答えでもっと簡単な解決策を見なさい。
Alex Yursha

0

既知のホストのフィンガープリントを削除する方法は次のとおりです。 known_hosts Chrome OSの場合)

接続が失敗したときのssh出力で、問題のあるホストエントリのインデックスを見つけます。例えば、下の行では問題のあるインデックスは 7

Offending ECDSA key in /.ssh/known_hosts:7

JavaScriptコンソールを開きます( CTRL + シフト + J Secure Shellウィンドウの)をクリックして、次のように入力します。 INDEX 適切な値(例: 7 ):

term_.command.removeKnownHostByIndex(INDEX);

この解決策は、 Leo Gagglのブログ

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