刪除伺服器上 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 的 oneliner,這變成

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_keysauthorized_keys.bak.如果您不想備份,則只需更改-i.bak-i.

您甚至可以刪除多個鍵:

sed -i.bak '/REGEX1/d; /REGEX2/d' ~/.ssh/authorized_keys

這裡唯一棘手的一點是正規表示式中的特殊字元需要轉義

答案3

沒有。您需要透過 SSH 登入並使用該金鑰sedgrep從該檔案中刪除該金鑰。

答案4

菲爾已經回答了這個問題,但我想補充一下,讓你更容易回答。由於您要求 ssh-copy-id 的反向操作,我假設您想在授權計算機上運行它。

ssh 密鑰僅包含64位基數人物。因此,您可以使用不在該清單中的 char 作為 sed 分隔符號。讓我們使用“#”。

ssh root@<hostname> -o PasswordAuthentication=no "sed -i.bak 's#`cat ~/.ssh/id_rsa.pub`##' ~/.ssh/authorized_keys"

將主機名稱替換為伺服器 IP。

如果詢問密碼,PasswordAuthentication 選項將導致 ssh 失敗

相關內容