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.
このコマンドを使用して、known_hostsからエントリを削除します。
ssh-keygen -R hostname
はい、1つのキーのみを削除できます。エディタで開いて問題のある行を削除するだけです。エラーメッセージのコロンの後の番号は行番号です。これが削除する行です。例では1行目です。
ホストキーを使用し始めたのは最近のことですが、それらを台無しにした場合、通常は1行につき1つのキーであるため、ファイルをバックアップし、適切なキーが見つかるまで1つずつ削除します。その後、他を追加し直します。少し長い道のりですが、うまくいくはずです。
また、そのエラーに基づいて、これまでのところ何もわからないが、問題のファイルの最初のホストキーである可能性があるため、vimでファイルを開きます
vim ~/.ssh/known_hosts
ヒット
dd
それを保存します。
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
私が見つけた別のクリーンで簡単な答えを共有するだけです。 known_hostsファイルがハッシュ化されているため、ホスト名を削除することは私にとって重要です。ただし、エラーメッセージの行番号に基づいてホストエントリを手動で編集できます。 Mike Scottが以前に指摘したように、問題のホスト名の行番号はエラーメッセージにあります。
または、私はこれを行うことができます。ここから: ssh known_hostsファイルの問題のあるキーを修正する方法
ちょっとしたクリマジック
sed -i 'xd' ~/.ssh/known_hosts
Xを行番号に置き換えて、出来上がり。また、sedが機能しない場合は、Perlの回答を提供しています。
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts
この場合、10.20.120.211は、known_hostsファイルから削除するホストです。(。)などの特殊文字を必ずエスケープしてください。
更新することにより、特定のホストの削除を回避できます。
ssh-keyscan -t ecdsa hostname >> ~/.ssh/known_hosts
これにより、ホストに再度接続する必要がなくなります。