SSHknown_hostsファイルとauthorized_keysファイルから重複エントリを消去する方法は?

SSHknown_hostsファイルとauthorized_keysファイルから重複エントリを消去する方法は?

私のGoogle検索結果があまり役に立たなかったので、ここに連絡してください。

私のUbuntuサーバーには、両方のファイルに重複した~/.ssh/authorzied_keysエントリがたくさんあります。~/.ssh/known_hosts

重複した行を削除して一度だけリストできるコマンド/ユーティリティがあるかどうか疑問に思います。

答え1

コマンドラインユーティリティはuniqandと呼ばれますsort。一意の項目のみを取得するには、ファイルをパイプでリンクするだけです。

sort ~/.ssh/authorized_keys | uniq > ~/.ssh/authorized_keys.uniq

次に、古いファイルを新しいファイルに置き換えます。

mv ~/.ssh/authorized_keys{.uniq,}

これは~/.ssh/known_hostsそれ自体で処理され、ssh重複項目を含めないでください(手動で変更する場合は可能であり、上記と同じ方法を使用できます)。

答え2

ssh-keygen -R hostname指定されたホスト名のエントリを削除します。

答え3

私の問題は、異なるホストキーを持つ1つのホストの複数のエントリです。これはJenkinsビルドスレーブからのものです。アプリケーションサーバーが再構築されました。ホスト名/ IPが新しいサーバーに移動されましたが、ホストキーが異なります。私が思いついたライナーは次のとおりです。

cat known_hosts | cut -f1 -d' ' | sort | uniq -c | \ 
sed '/^ *1 /d' | awk '{print $2}' | while read line; do \
ssh-keygen -R $line; ssh-keyscan $line; \
done

Known_hostsの最初のフィールドを取得して並べ替えて、uniq -c各ホスト名のインスタンス数を計算し、sed1の数を持つすべての行を削除してからssh-keygen -Rホストを削除し、最後にssh-keyscan現在のホストキーをKnown_hostsに追加します。

警告:ホストキーを変更したくない場合は、このコマンドを実行する前にホストキーが変更された理由を理解する必要があります。ホストキーは、予想されるホスト(中間者ではない)に接続することを保証します。

答え4

各コピーの1つを保持しようとしているので、最も簡単な解決策は、テキストエディタを使用して、正しい情報が含まれなくなった各ファイルの行を削除することです。

関連情報