サーバー上の ssh キーを削除するコマンド (またはワンライナー) はありますか? ssh-copy-id の反対のようなものですか?
答え1
Ignatio が示唆したように、これは で実行できますgrep -v
。
some unique string
以下は、含まれているキーを削除するか、authorized_keys
他のキーが残っていない場合にファイルを削除する例です。
if test -f $HOME/.ssh/authorized_keys; then
temp_file=$(mktemp)
if grep -v "some unique string" $HOME/.ssh/authorized_keys > $temp_file; then
cat $temp_file > $HOME/.ssh/authorized_keys && rm $temp_file;
else
rm $HOME/.ssh/authorized_keys && rm $temp_file;
fi;
fi
some unique string
削除したいキーにのみ存在するものに置き換えます。
SSH経由のワンライナーとしては、
ssh hostname 'if test -f $HOME/.ssh/authorized_keys; then temp_file=$(mktemp); if grep -v "some unique string" $HOME/.ssh/authorized_keys > $temp_file; then cat $temp_file > $HOME/.ssh/authorized_keys && rm $temp_file; else rm $HOME/.ssh/authorized_keys && rm $temp_file; fi; fi'
Linux (SLES) および HP-UX でテスト済み。
答え2
sed
コンパクトなソリューションを提供します:
sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys
これにより、オリジナルauthorized_keys
が に保存されますauthorized_keys.bak
。バックアップが必要ない場合は、-i.bak
に変更してください-i
。
複数のキーを削除することもできます。
sed -i.bak '/REGEX1/d; /REGEX2/d' ~/.ssh/authorized_keys
ここで唯一難しいのは正規表現内の特殊文字はエスケープする必要がある。
答え3
sed
いいえ。SSH で接続して、またはを使用してgrep
ファイルからキーを削除する必要があります。
答え4
Phil はすでにこの質問に答えていますが、追加して簡単にしたいと思います。また、ssh-copy-id の逆を尋ねているので、許可されたマシンで実行したいと想定しています。
SSHキーには以下が含まれますベース64文字。したがって、リストにない文字を sed 区切り文字として使用できます。ここでは '#' を使用します。
ssh root@<hostname> -o PasswordAuthentication=no "sed -i.bak 's#`cat ~/.ssh/id_rsa.pub`##' ~/.ssh/authorized_keys"
ホスト名をサーバーの IP に置き換えます。
PasswordAuthenticationオプションはパスワードを要求するとSSHが失敗する原因になります