web-dev-qa-db-ja.com

known_hostsからキーを削除

私はここ数週間でいくつかの仮想マシンを構築しました。問題は、.ssh/known_hostsによって Man in the middle という警告が表示されることです。これは、別のフィンガープリントが仮想マシンIPに関連付けられているために発生します。

しかし、.ssh/known_hostsファイルには、IPに関するレコードはありません。奇妙な、キー風の文字列と "ssh-rsa"の2つだけです。

known_hostsから古いキーを削除する方法について何か考えがありますか?

128
Adam Matan
sed -i '6d' ~/.ssh/known_hosts

6行目を削除して、ファイル〜/ .ssh/known_hosts:6を変更します。

私の意見では、ssh-keygen -Rを使用することはopensshパワーユーザーにとってより良い解決策ですが、あなたの通常のLinux管理者は上記の方法を使用することによって彼/彼女のsedスキルを新鮮に保つためにもっとうまくいくでしょう。

84
mikewaters

最も簡単な解決策は、

rm -f .ssh/known_hosts

sshはファイルを再作成しますが、他のホストに対するキーチェックを失います。

または、次のものを使用できます。

ssh-keygen -R "hostname"

あるいは、sshの「man-in-the-middle」メッセージで、known_hostsファイルのどの行に問題のあるフィンガープリントがあるかを示す必要があります。ファイルを編集し、その行に移動して削除します。

111
Sean Staats

これにはssh-keygenスイッチ(-R)があります。

man ssh-keygenのコメント:

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

72
user201564

警告は既知のhostsファイルの正確な行を教えてくれます。

これが例です:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA Host key for foo-bar.net has changed,
and the key for the corresponding IP address 127.0.0.1
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the Host
and its Host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE Host IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

/home/user/.ssh/known_hosts:6の部分を見てください。ファイルと行番号を指定します。

18
innaM

UserKnownHostsFileフラグとStrictHostKeyCheckingフラグを使用して、known_hostsファイルをチェックしないようにsshに指示することもできます。

例えば:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]

使いやすくするために、これを別名にすることができます。

alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

サーバーの証明書を信頼していると確信しているときはいつでも大胆になります。

8
rouble

この問題を解決するには、次のコマンドを実行する必要があります。端末を開き、次のコマンドを入力します。

以下のすべての例では、-Rの後の値を置き換えるだけです。

ssh-keygen -R server-name
ssh-keygen -R server.ip.addre.ss
ssh-keygen -R 202.54.1.5
ssh-keygen -R server1.example.com
8
Tarun Gupta

既知のホストから単一行を削除することもできます。 rmknownhost 111(111は削除する行です):

#! /usr/bin/env Ruby
line = ARGV[0] || raise("gimme line to remove")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Removed:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

これをrmknownhostとして、あなたのPATHからのフォルダーに保存してください。

2
grosser

すべての答えは良いのですが、本当のSSHプロのために我々はポート番号を持つsshの署名を削除する方法を見逃しています。

例えば。あなたが接続する

ssh some.Host.name -p 222

そして、あなたは警告を受けます、そしてこれを取り除くために、あなたは角括弧コロンポート番号を使う必要があります:

ssh-keygen -R [some.Host.name]:222

これが標準ではない設定ユーザーに役立つことを願っています。

1

ホスト名またはipのエントリは最初の列にあるはずです。この警告には、問題のあるキーがある行番号も記載されています。

0
stimms

テキストファイルです。あなたは簡単にvi(m)で編集して問題の行を削除(dd)してファイルを保存することができます(wq)。しかし、ホストを削除する特定のコマンドがある場合は、それがおそらく最も安全な方法です。

0
Ryan Griggs