known_hostsからキーを削除します


129

ここ数週間で、いくつかの仮想マシンを構築しました。問題は、真ん中の警告.ssh/known_hostsを私に与えることです。これは、別のフィンガープリントが仮想マシンのIPに関連付けられているために発生します。

.ssh/known_hostsただし、このファイルでは、IPに関連するレコードは見つかりません。2つの奇妙なキーのような文字列と「ssh-rsa」だけが見つかります。

誰から古いキーを削除するかについてのアイデアはありknown_hostsますか?


7
参照する「奇妙なキーのような文字列」は、ハッシュされたホスト/ IPアドレスです。これは、侵入者がどのシステムにアクセスできるかを知るのを防ぐセキュリティ機能です。これが表示される場合、ssh_configがHashKnownHosts yes設定されています。
Deebster

1
ファイルの内容がわかりにくいと感じる場合は、おそらく行の折り返しが有効になっています。それを無効にします。すべての行は、ホスト名またはIPアドレスで始まります。
ダニエルB

回答:


90
sed -i '6d' ~/.ssh/known_hosts

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

私の意見でssh-keygen -Rは、opensshのパワーユーザーにとっては、使用する方が優れたソリューションですが、通常のLinux管理者は、上記の方法を使用してsedスキルを新鮮に保つ方が良いでしょう。


18
そのための公式アプリケーションがある場合、構成ファイルを手動で編集することは良いアドバイスではないと思います。リスクを冒してもプロになるわけではなく、最も早く安全なオプションを見つけることができます。これは、を/etc/sudoersせずに編集するように人々に伝えるようなものvisudoです。sedスキルを磨きたい場合は、システムを台無しにせずに実行してください。
クラクソール14年

2
「あなたがそのための公式アプリケーションを持っている場合」=>両方でssh-keygen -Rありsed -i {line}d、かなり「公式」であり、両方とも近い将来に機能します。Util ssh-keygenを使用すると、行番号で削除できます。どちらも完全に受け入れられます(行番号は、現代のデータセンターのホスト名を処理するよりも処理が簡単で、エラーが発生しにくいためです)。
マイケル

2
A)特に6行目の削除は、すべて非常に「手に見えません」です。ファイルの6行目で何が重要であるかについての説明はありませんか?!B)もman ssh-keygen言及しているssh-keygen -R hostname あなたがちょうど言ったssh-keygen -R指定されていないホスト名で、そしてあなたはそれによって何を意味するかを説明していません。
-barlop

124

最も簡単な解決策は次のとおりです。

rm -f .ssh/known_hosts

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

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

ssh-keygen -R "hostname"

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


55
ssh-keygen -R hostnameも動作します。
荒廃2009

6
そのファイルを削除すると、他のキーも削除されます。
shgnInc

16
ファイルを削除することは悪いアドバイスです。古いPCのマウスが壊れているため、新しいPCを購入するように誰かに伝えるようなものです。公式アプリケーションで編集できるファイルを手動で編集することも悪い考えです。このssh-keygenオプションはコメントのために追加されましたが、説明はありません。この答えはそれほど多くの賛成に値するとは思わない。
クラクソール14年

12
-1「known_hostsファイル全体を削除する」最初の行全体のため。これはひどい、ひどい、ひどい提案であり、編集する必要があります。
オリビエデュラック

4
このソリューションは過剰です。問題のある行を削除するだけです。それでおしまい。
ブレイクフレデリック

81

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

man ssh-keygen 読み取り:

-R ホスト名

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


8
これが最も簡単で安全な方法です。

注:これにより、known_hostsファイルのアクセス許可が0600に変更されます。何らかの理由でknown_hostsファイルを共有している場合、共有が無効になる可能性があります。
ジリクルダ

そして正しいもの。また、[localhost]:portブラケットを使用して、= /を推測するカスタムポートを使用したため、行う必要がありました。他の人が言ったように、一時的/テストシステム開発には、SSHキーチェックなしのアプローチも使用します。
Pysis

これにより、すべてのオカレンスが削除されるため、最適な方法です。あなたはして新しいキーを追加することができますssh-keyscan -H my.ssh.server.example.com >> ~/.ssh/known_hosts;
木の実

18

この警告は、既知のホストファイルの正確な行を示します。

次に例を示します。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       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部品を参照してください?ファイルと行番号を指定します。


10

この問題を取り除くには、次のコマンドを実行する必要があります。ターミナルを開き、次のコマンドを入力します。

以下のすべての例では、-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

この方法は、以前の回答で既に提案されています。あなたの答えの違いを拡大していただけますか?
ブルギ

@Burgi-この回答はssh-keygen -R、これまでの他のどの回答よりも構文に関する詳細を提供します。例で正確に何が書けるかを示しています-R。したがって、この答えは、まったく新しい答えではありませんが、価値があります。
イッツ

@Yitz私のコメントはレビューの一環として作成されました。当時(18か月前)、この質問をさらに改善するには少し助けが必要だと思いました。
ブルギ

8

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

例えば:

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

使いやすくするために、次のエイリアスを作成できます。

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

これで、サーバーの証明書を信頼できることが確実なときはいつでも、単にboldsshすることができます。


8
なんて恐ろしいアイデアだ。~/.ssh/known_hosts最新の状態を維持するのが面倒だという理由だけで、セキュリティのレイヤーを完全に無効にしますか?なぜ先に進んで使用しtelnetないのですか?「確信があるときはいつでも」-確信があるなら、MITM攻撃が何であるかわからないので、おそらくいくつかの良い文献を読むのに時間を費やすべきです。
クラクソール14年

2
OPの質問に基づいて、これは有効な答えだと思います。多くのVMを作成/破棄するテストシステムがある場合があります。(RHCE試験の準備中に、今これを行っています。)セキュリティへの影響はないかもしれません。セキュリティへの影響は注目に値しますが、これを「恐ろしいアイデア」とラベル付けする必要はないと思います。
リックチャタム


3

すべての答えは良いですが、実際のSSHプロでは、ポート番号でssh署名を削除する方法に関する情報がありません。

  • 単純なSSHホスト署名削除コマンド:

    ssh-keygen -R example.com
    
  • 複雑なsshキーの削除。たとえば、非標準ポート222でsshに接続します。

    ssh example.com -p 222
    

警告が表示されます。これを削除するには、角括弧のコロンポート番号を使用する必要があります。

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

これが非標準の構成ユーザーに役立つことを願っています。


まさに私が探していたもの。ありがとうございました!
aexl

1

Exエディターを使用する方法は次のとおりです。

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

6thは、警告メッセージに記載されている行番号です。このようなもの:

/home/user/.ssh/known_hosts:6 <== LINE NUMBER内のIPの攻撃キー


一般的に、の代わりにnon-interactivelyファイル編集するために使用exすることをお勧めします。これは、S tream ED itorであり、そのパラメーターは非標準のFreeBSD拡張です。sed-i


0

ホスト名またはIPのエントリは、最初の列にあります。警告には、問題のあるキーがある行番号もリストする必要があります。


0

rmknownhost 111を使用して、既知のホストから1行を削除することもできます(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


特定のテキストエディタでこれを行うことの利点は何ですか?sudoerをvisudoで編集する方法など、そうしない理由はありますか?
アンディレスター

これにはどんなディストリビューションが付属していますか?Ubuntuにはないようです。
フリッカーフライ

利点は、それが自動化され、迅速であるということです/それはあなたがあなた自身を追加する別個のバイナリです
グロス

2
この回答を投稿した日に作成した独自のブログエントリをリンクする代わりに、ここにスクリプトを投稿することもできます。これはスパム私見として適格です。単純なエイリアスを作成して同じ結果を得ることができることは言うまでもなく、7行のルビースクリプトは必要ありません。
クラクソール14年

1
または、これを〜/ .bashrc:に追加して、sshdel() { sed -i "${@}d" ~/.ssh/known_hosts; }で呼び出しますsshdel [line number]。ルビー、バイナリ、心配はありません。
ルビノレール

0

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


VIMでファイルを直接編集する方法が「安全でない」とは思いません。これは、VIMでの快適度に基づいています。特にこのファイルでは、最大のリスクは多くのキーを削除することです。その場合、再度プロンプトが表示されます。
リックチャタム

私が言及していた「安全性」には、1)他のファイル(ある場合)の依存情報を削除することを忘れる/知らない、2)必要以上に誤って削除してファイルを壊すことが含まれます。
ライアングリッグス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.