Y a-t-il une commande (ou une ligne de commande) pour supprimer une clé SSH sur un serveur ? Quelque chose comme l'opposé de ssh-copy-id ?
Réponses
Trop de publicités?sed
fournit une solution compacte :
sed -i.bak '/REGEX_MATCHING_KEY/d' ~/.ssh/authorized_keys
Cela sauvegardera l'original authorized_keys
dans authorized_keys.bak
. Si vous ne voulez pas la sauvegarde, changez juste -i.bak
en -i
.
Vous pouvez même supprimer plusieurs clés :
sed -i.bak '/REGEX1/d; /REGEX2/d' ~/.ssh/authorized_keys
La seule partie délicate ici est que les caractères spéciaux dans la regex doivent être échappés.
Tel que Ignatio l'a suggéré, cela peut être fait avec grep -v
.
Voici un exemple qui supprime la clé contenant some unique string
ou supprime simplement le fichier authorized_keys
lorsqu'aucune autre clé ne reste.
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
Remplacez some unique string
par quelque chose qui n'existe que dans la clé que vous souhaitez supprimer.
En tant que ligne de commande via ssh, cela devient
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'
Testé sur Linux (SLES) et HP-UX.
Phil a déjà répondu à cette question mais je veux ajouter quelque chose et le rendre plus facile pour vous. Et puisque vous demandez le contraire de ssh-copy-id, je suppose que vous voulez l'exécuter sur la machine autorisée.
Les clés ssh ne contiennent que des caractères base64. Vous pouvez donc utiliser un caractère comme délimiteur sed qui n'est pas dans cette liste. Utilisons '#'.
ssh root@ -o PasswordAuthentication=no "sed -i.bak 's#`cat ~/.ssh/id_rsa.pub`##' ~/.ssh/authorized_keys"
Remplacez hostname par l'IP du serveur.
L'option PasswordAuthentication provoquera un échec de la connexion ssh si elle demande un mot de passe