Befehl zum Entfernen eines autorisierten SSH-Schlüssels auf dem Server

Befehl zum Entfernen eines autorisierten SSH-Schlüssels auf dem Server

Gibt es einen Befehl (oder einen Einzeiler) zum Entfernen eines SSH-Schlüssels auf einem Server? So etwas wie das Gegenteil von ssh-copy-id?

Antwort1

Wie Ignatio vorgeschlagen hat, kann dies mit erfolgen grep -v.

Hier ist ein Beispiel, das den Schlüssel entfernt some unique stringoder die authorized_keysDatei einfach löscht, wenn kein anderer Schlüssel übrig bleibt.

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

Ersetzen Sie es some unique stringdurch etwas, das nur in dem Schlüssel vorhanden ist, den Sie entfernen möchten.

Als Oneliner über SSH wird dies

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'

Getestet unter Linux (SLES) und HP-UX.

Antwort2

sedbietet eine kompakte Lösung:

sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys

authorized_keysDadurch wird das Original in gespeichert authorized_keys.bak. Wenn Sie kein Backup möchten, wechseln Sie einfach -i.bakzu -i.

Sie können sogar mehrere Schlüssel entfernen:

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

Das einzig Schwierige dabei istSonderzeichen im regulären Ausdruck müssen maskiert werden.

Antwort3

Nein. Sie müssen sich per SSH anmelden und sedoder verwenden grep, um den Schlüssel aus der Datei zu entfernen.

Antwort4

Phil hat diese Frage bereits beantwortet, aber ich möchte noch etwas hinzufügen und es Ihnen einfacher machen. Und da Sie das Gegenteil von ssh-copy-id fragen, gehe ich davon aus, dass Sie es auf einem autorisierten Computer ausführen möchten.

SSH-Schlüssel enthalten nurBase64-DatenbankZeichen. Sie können also ein Zeichen als Sed-Trennzeichen verwenden, das nicht in dieser Liste enthalten ist. Lassen Sie uns „#“ verwenden.

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

Ersetzen Sie den Hostnamen durch die Server-IP.

Die Option „PasswordAuthentication“ führt zu einem SSH-Fehler, wenn nach dem Passwort gefragt wird

verwandte Informationen