2009-08-26 16:00:30 +0000 2009-08-26 16:00:30 +0000
140
140

known_hostsからキーを削除する

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

しかし、.ssh/known_hostsファイルの中には、IPに関連したレコードは見当たらず、ただ2つの奇妙な鍵のような文字列と “ssh-rsa "があるだけです。

誰か、known_hostsから古い鍵を削除する方法について、何か考えがある方はいますか?

回答 (11)

139
139
139
2009-08-26 16:11:22 +0000

最も簡単な解決策は次のようにします:

rm -f .ssh/known_hosts

ssh はファイルを再作成しますが、他のホストの鍵チェックができなくなります!

または、次のようにします:

ssh-keygen -R "hostname"

または、ssh の “man-in-the-middle” メッセージは、既知のホストファイルのどの行に問題のある指紋があるかを示していなければなりません。ファイルを編集して、その行にジャンプして削除してください。

91
91
91
2010-07-02 17:56:38 +0000
sed -i '6d' ~/.ssh/known_hosts

6 行目を削除して ~/.ssh/known_hosts:6 を変更します。

私の考えでは、ssh-keygen -R を使うことは openssh のパワーユーザにとってはより良い解決策であり、通常の Linux 管理者は上記の方法を使って sed のスキルを新鮮に保つ方が良いでしょう。

89
89
89
2013-02-22 18:41:50 +0000

このための ssh-keygen スイッチ (-R) があります。

man ssh-keygen を読むと:

-R hostname

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

18
18
18
2009-08-26 16:17:33 +0000

この警告は既知のホストファイルの正確な行を教えてくれます。これはファイルと行番号を指定します。

11
11
11
2016-05-28 09:28:08 +0000

この問題を解決するには、以下のコマンドを実行する必要があります。ターミナルを開き, 次のコマンドを入力してください:

以下のすべての例では, -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
8
8
2014-03-12 16:05:22 +0000

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

例えば:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

使いやすくするために、次のようにエイリアスを付けることができます。

4
4
4
2018-05-16 08:03:38 +0000

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

  • シンプルなSSHホスト署名削除コマンド:

  • 複雑なssh鍵削除、例えば、あなたは非標準のポート222でsshに接続する:

とあなたは警告を取得し、これを削除するには、角括弧コロンポート番号を使用する必要があります:

ssh-keygen -R [example.com]:222

これが非標準の設定のユーザーのために役立つことを願っています。

1
1
1
2019-10-09 16:59:56 +0000

例のエディタを使った方法は以下の通りです:

ex +6d -scwq ~/.ssh/known_hosts

(6番目は警告メッセージの行番号) 例えば:

Offending key for IP in /home/user/. ssh/known_hosts:6 <== LINE NUMBER


一般的に、 非対話的にファイルを編集する には ex の代わりに sed ](https://vi.stackexchange.com/q/788/467) を使用することをお勧めします。

0
0
0
2010-06-22 16:32:09 +0000

また、既知のホストから1行だけを削除するには、例えば 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のフォルダに保存してください。

0
0
0
2009-08-26 16:13:25 +0000

ホスト名またはIPのエントリは最初の列にあるべきです。警告はまた、違反するキーが存在する行番号をリストアップしなければなりません。

0
0
0
2014-06-27 13:23:54 +0000

テキストファイルです。vi(m)で簡単に編集できますし、問題の行を削除して(dd)、ファイルを保存して(wq)おけばいいだけです。しかし、ホストを削除するための特定のコマンドがあるのであれば、それが一番安全な方法でしょう。