Einige SSH-Serversoftware unterstützen das RFC 4819-Protokoll für die Verwaltung von autorisierten SSH-Schlüsseln, aber es ist so selten, dass es unter Linux fast nicht existiert :(
grawity
3
Ausgezeichnete Frage, dies ist wirklich fehlende Funktionalität zu ssh-copy-id, um die Schlüsselrotation zu erleichtern.
Zabuzzman
1
Es ist erwähnenswert, dass ssh-keygendie -ROption zum Entfernen von Schlüsseln vorhanden ist known_hosts, aber leider ssh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keysnicht funktioniert. Ich würde sedstattdessen die unten stehende Option verwenden.
Digital Trauma
Antworten:
10
Wie Ignatio angedeutet hat, kann dies mit erfolgen grep -v.
In diesem Beispiel wird der Schlüssel entfernt, der some unique stringdie authorized_keysDatei enthält, oder nur gelöscht , wenn kein anderer Schlüssel übrig bleibt.
if test -f $HOME/.ssh/authorized_keys; then
if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then
cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
else
rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp;
fi;
fi
Ersetzen Sie 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 if grep -v "some unique string" $HOME/.ssh/authorized_keys > $HOME/.ssh/tmp; then cat $HOME/.ssh/tmp > $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; else rm $HOME/.ssh/authorized_keys && rm $HOME/.ssh/tmp; fi; fi'
Wenn Sie nur die base64-Zeichen in der öffentlichen Schlüsseldatei verwenden (z. B. awk '{print $2}' ~/.ssh/id_rsa.pub), müssen Sie sich keine Gedanken darüber machen, ob Sonderzeichen maskiert werden .
Juan
7
Nee. Sie werden in SSH benötigen und verwenden sedoder grepden Schlüssel aus der Datei zu entfernen.
Vielen Dank. Ich werde die Frage etwas länger offen halten, um zu sehen, ob jemand auch ein Skript bereitstellen kann, das das Gegenteil von ssh-copy-id macht
grm
@grm: Ich würde vorschlagen, dass Sie die Frage für immer offen halten, oder zumindest bis eine ssh-undo-copy-id implementiert ist! ;-)
Max L.
0
Phil hat diese Frage bereits beantwortet, aber ich möchte sie ergänzen und für Sie einfacher machen. Und da Sie ssh-copy-id umkehren, gehe ich davon aus, dass Sie es auf einem autorisierten Computer ausführen möchten.
ssh-Schlüssel enthalten nur base64- Zeichen. Sie können also ein Zeichen als Trennzeichen verwenden, das nicht in dieser Liste enthalten ist. Verwenden wir '#'.
Der 'Kommentar' im Pub-Schlüssel enthält möglicherweise keine base64-Zeichen. Wenn es ein "#" hat, bricht Ihr Beispiel. Vielleicht awk '{print $2}' ~/.ssh/id_rsa.pubmit einigen sedoder grep -vstattdessen verwenden.
ssh-keygen
die-R
Option zum Entfernen von Schlüsseln vorhanden istknown_hosts
, aber leiderssh-keygen -R <HOSTNAME> -f ~/.ssh/authorized_keys
nicht funktioniert. Ich würdesed
stattdessen die unten stehende Option verwenden.Antworten:
Wie Ignatio angedeutet hat, kann dies mit erfolgen
grep -v
.In diesem Beispiel wird der Schlüssel entfernt, der
some unique string
dieauthorized_keys
Datei enthält, oder nur gelöscht , wenn kein anderer Schlüssel übrig bleibt.Ersetzen Sie
some unique string
durch etwas, das nur in dem Schlüssel vorhanden ist, den Sie entfernen möchten.Als Oneliner über ssh wird dies
Getestet unter Linux (SLES) und HP-UX.
quelle
sed
ist besser darinsed
bietet eine kompakte Lösung:Dadurch wird das Original
authorized_keys
in gespeichertauthorized_keys.bak
. Wenn Sie das Backup nicht möchten, wechseln Sie einfach-i.bak
zu-i
.Sie können sogar mehrere Schlüssel entfernen:
Das einzig schwierige dabei ist, dass Sonderzeichen im regulären Ausdruck maskiert werden müssen .
quelle
awk '{print $2}' ~/.ssh/id_rsa.pub
), müssen Sie sich keine Gedanken darüber machen, ob Sonderzeichen maskiert werden .Nee. Sie werden in SSH benötigen und verwenden
sed
odergrep
den Schlüssel aus der Datei zu entfernen.quelle
Phil hat diese Frage bereits beantwortet, aber ich möchte sie ergänzen und für Sie einfacher machen. Und da Sie ssh-copy-id umkehren, gehe ich davon aus, dass Sie es auf einem autorisierten Computer ausführen möchten.
ssh-Schlüssel enthalten nur base64- Zeichen. Sie können also ein Zeichen als Trennzeichen verwenden, das nicht in dieser Liste enthalten ist. Verwenden wir '#'.
Ersetzen Sie den Hostnamen durch die Server-IP.
Die Option PasswordAuthentication führt dazu, dass ssh fehlschlägt, wenn Sie nach dem Kennwort gefragt werden
quelle
awk '{print $2}' ~/.ssh/id_rsa.pub
mit einigensed
odergrep -v
stattdessen verwenden.