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 string
oder die authorized_keys
Datei 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 string
durch 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
sed
bietet eine kompakte Lösung:
sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys
authorized_keys
Dadurch wird das Original in gespeichert authorized_keys.bak
. Wenn Sie kein Backup möchten, wechseln Sie einfach -i.bak
zu -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 sed
oder 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