サーバー上の SSH 認証キーを削除するコマンド

サーバー上の SSH 認証キーを削除するコマンド

サーバー上の 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が失敗する原因になります

関連情報