web-dev-qa-db-ja.com

SSHのknown_hostsファイルから特定のホストキーを削除することは可能ですか?

SSHのknown_hostsファイルから特定のホストキーを削除することは可能ですか?

私は通常、known_hostsファイル全体を削除することになりますが、これには何の問題もありませんが、好奇心から、1つのエントリだけを削除することは可能ですか?

known_hostsファイルを開きましたが、その内容を理解するのに苦労しています。

以下は私が直面したメッセージで、この質問をすることになりました。

Add correct Host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA Host key for foo.com has changed and you have requested strict checking.
Host key verification failed.
303
theTuxRacer

このコマンドを使用して、known_hostsからエントリを削除します。

ssh-keygen -R hostname
506
Takkat

はい、1つのキーのみを削除できます。エディタで開いて問題のある行を削除するだけです。エラーメッセージのコロンの後の番号は行番号です。これが削除する行です。例では1行目です。

32
Mike Scott

ホストキーを使用し始めたのは最近のことですが、それらを台無しにした場合、通常は1行につき1つのキーであるため、ファイルをバックアップし、適切なキーが見つかるまで1つずつ削除します。その後、他を追加し直します。少し長い道のりですが、うまくいくはずです。

また、そのエラーに基づいて、これまでのところ何もわからないが、問題のファイルの最初のホストキーである可能性があるため、vimでファイルを開きます

vim ~/.ssh/known_hosts

ヒット

dd

それを保存します。

19
Buddy Lindsey

Ssh-keygen -R hostnameを使用しても常に機能するとは限りません。 ssh-agentハイジャックを防ぐためにホスト名を「隠す」新しいバージョンのSSHがある場合、ssh-keygenはホスト名をハッシュ解除できないようです。

たとえば、build-node-01というホストがあり、それに接続してキーを受け入れました。その後、ゼロから再構築し、新しいホストフィンガープリントを取得して再接続しようとすると、行Xに競合があるという警告が表示されます(3行目など)。 ssh-keygen -R hostnameを実行しますが、次に接続しようとすると、まだ競合があるという警告が表示されます。ホスト名がハッシュされ、読み取り可能なホスト名ではなく[1] Bu4Ch@R@4D0M57uFFとして表示されることを発見するためだけにファイルを調べました。

この場合、問題のホストを正常に削除する唯一の方法は、

sed -i 'xd' ~/.ssh/known_hosts

このsedをさらに一歩進めるには、間違った行を削除する場合にknown_hostsのバックアップを作成します。この場合、-iオプションに.bak(または任意の拡張子)を追加して、そのバックアップを作成します。拡張。 ssh-keygenを使用すると、これが自動的に行われます。

sed -i.bak 'xd' ~/.ssh/known_hosts
3
dragon788

私が見つけた別のクリーンで簡単な答えを共有するだけです。 known_hostsファイルがハッシュ化されているため、ホスト名を削除することは私にとって重要です。ただし、エラーメッセージの行番号に基づいてホストエントリを手動で編集できます。 Mike Scottが以前に指摘したように、問題のホスト名の行番号はエラーメッセージにあります。

または、私はこれを行うことができます。ここから: ssh known_hostsファイルの問題のあるキーを修正する方法

ちょっとしたクリマジック

sed -i 'xd' ~/.ssh/known_hosts

Xを行番号に置き換えて、出来上がり。また、sedが機能しない場合は、Perlの回答を提供しています。

1
Corvus B
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

この場合、10.20.120.211は、known_hostsファイルから削除するホストです。(。)などの特殊文字を必ずエスケープしてください。

0
Shan Valleru

更新することにより、特定のホストの削除を回避できます。

ssh-keyscan -t ecdsa hostname >> ~/.ssh/known_hosts

これにより、ホストに再度接続する必要がなくなります。

0
Pablo Bianchi