Comment puis-je supprimer la clé gpg que j'ai ajoutée à l'aide d'apt-key add -?

146

Je n'ai plus besoin de la clé dans le trousseau de mon serveur. Est-il possible de l'enlever? J'ai ajouté la clé en utilisant cette commande:

 curl http://repo.varnish-cache.org/debian/GPG-key.txt | apt-key add -

Merci pour ton aide

Raymond
la source
J'ai trouvé cette question utile car, à l'heure actuelle, l'interface graphique Ubuntu 18.04 appelée Software & Updates-->Authenticationne semble pas fonctionner (elle ne peut supprimer aucune clé logicielle approuvée). Au lieu de cela, les paramètres donnés ci-dessous ont dû être utilisés.
Sun Bear

Réponses:

198

Vous devez d’abord trouver l’identifiant de la clé que vous avez ajoutée. Faites ceci par la commande:

sudo apt-key list

Il listera toutes les clés que vous avez, avec chaque entrée ressemblant à ceci:

pub   1024R/B455BEF0 2010-07-29
uid                  Launchpad clicompanion-nightlies

Une fois que vous avez déterminé la clé à supprimer, utilisez la commande sudo apt-key del <keyid><keyid>est remplacé par le keyid actuel de la clé que vous souhaitez supprimer de votre trousseau.

$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$
Nitin Venkatesh
la source
@Raymond No problemo :)
Nitin Venkatesh le
1
Ah je vois que l'identifiant unique est sur la ligne étiquetée pub, pas la ligne étiquetée uid.
ctrl-alt-delor
6
sur ubuntu 16.10 résultats semble un peu différent:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
Mxdsp
On dirait que cela doit être mis à jour pour 18.04
kennyB le
Après avoir supprimé la clé, j'ai rencontré un nouveau problème The following signatures couldn't be verified because the public key is not available: NO_PUBKEY. Que dois-je faire ensuite?
Corey
126

Le 16.10, l'ID de clé courte n'est plus affiché lorsque vous utilisez la commande list, mais il s'agit en réalité des 8 derniers caractères du long hexagone.

Ainsi, par exemple, l'identifiant de clé pour la clé suivante

/etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg
------------------------------------------------------
pub   rsa4096 2012-05-11 [SC]
      8439 38DF 228D 22F7 B374  2BC0 D94A A3F0 EFE2 1092
uid           [ unknown] Ubuntu CD Image Automatic Signing Key (2012) <[email protected]>

L'identifiant de clé sera EFE21092

Wesam
la source
17
Très utile, merci. Ceci est extrêmement inutile UX.
SColvin
11
@ SColvin vous pouvez simplement faire sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"et je pense qu'il est plus sûr d'utiliser toute l'empreinte digitale, le keyid pourrait avoir des doublons (au moins lorsque vous utilisez PGP pour les emails, j'ai lu que vous devriez partager votre empreinte digitale entière et pas seulement le keyid).
baptx
1
Très utile, très vrai aussi pour 17h10!
Hartmut P.
2
Et pour 18.04.1.
Russ Bateman
Je vous remercie. Mauvaise décision de conception.
Brian Smith
4

J'ai fait un court script pour faciliter les choses et en utilisant une chaîne au lieu de l'id.

Vous pouvez utiliser mon script si la clé contient une chaîne unique que vous connaissez.
par exemple dans mon cas pour webmin

pub   1024D/11F63C51 2002-02-28
uid                  Jamie Cameron <[email protected]>
sub   1024g/1B24BE83 2002-02-28

Je suis sûr que seule la clé Webmin de mon système est jcameroncompatible avec ce script pour supprimer la clé correspondante.

Je l'ai enregistré comme ~/removeAptKey

et l'exécuter comme

sudo ./removeAptKey jcameron

La sortie devrait être quelque chose comme

KEYID: 11F63C51
OK

Voici mon script:

#!/bin/bash

function printKeys(){
    echo "Installed keys are"
    echo ""
    sudo apt-key list
}

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

if [[ $# -eq 0 ]]
then
    echo "No key name provided"
    exit 1
fi

UNIQUE=$1

sudo apt-key list | grep "${UNIQUE}" -B 1 > result.temp

LENGTH=$(cat result.temp | wc -l)

if [[ ${LENGTH} -gt 2 ]]
then
    echo "Attention you found more than 1 key. Use a more specific string."
    printKeys
    exit 2
fi

if [[ ${LENGTH} != 2 ]]
then
    echo "Key not found. Doing nothing."
    printKeys
    exit 3
fi

KEYID=$(cat result.temp | grep 'pub' | cut -d " " -f 4 | cut -d "/" -f 2)
echo "KEYID: "$KEYID

apt-key del ${KEYID}

rm result.temp

J'obtiens d'abord les deux lignes supérieures du bloc de ma clé:

  • sudo apt-key list: liste les clés apt comme d'habitude
  • grep '${UNIQUE}' -B 1: ne prend que la ligne contenant la chaîne de clé unique jcameronet -B 1la ligne précédente
  • > result.temp: Enregistrez-le dans un fichier (qui est ensuite supprimé)

Si cela retourne exactement 2 lignes (-> j'ai exactement 1 clé), je passe à autre chose:

  • grep 'pub': Maintenant, ne prenez que la ligne avec l' pupidentifiant de clé
  • cut -d " " -f 4: prenez le 4ème mot de cette ligne (le premier est pubalors deux espaces, que la chaîne que nous sommes après ``)
  • cut -d "/" -f 2: ne prendre que la partie après /

Et enfin supprimer cette clé et le nettoyage

  • apt-key del ${KEYID}(dans mon cas 11F63C51)
  • rm result.temp: plus besoin de ce fichier
derHugo
la source
J'ai couru ceci sans paramètre et cela vient d'effacer toutes mes clés. ; (
Gabriel Fair
Si quelqu'un d'autre a les clés en main, j'ai pu le réparer en suivant les instructions suivantes: askubuntu.com/a/145933/13693
Gabriel Fair
Hu? Comment est-ce arrivé? Il devrait sortir avec "Pas de nom de clé fourni" s'il n'y avait pas de paramètre ..
derHugo
@derHugo n'est pas sûr, mais est-il possible que la #clause en soit la cause?
Diffusé le
@ défusé si vous voulez dire $#alors non. Il retourne la quantité de paramètres donnés.
derHugo
2

Je sais que je pourrais être en retard, mais je voulais juste partager cette commande d'une ligne pour y parvenir.

Remarque : cela ne fonctionnera que si la sortie est une clé unique.


Versions Ubuntu jusqu'à 16.04 (MISE À JOUR 2018-12-22):

apt-key del $(apt-key list | awk 'NR=='$(apt-key list | grep --line-number --regexp "FOOBAR" | cut --fields 1 --delimiter ":")'{print;exit}' | awk '{print $2}' | cut --fields 2 --delimiter "/")

FOOBARest le nom de l'UID.


Versions Ubuntu à partir de 16.10:

apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "FOOBAR" | cut --fields 1 --delimiter ":") - 1`'{print;exit}')

FOOBARest le nom de l'UID.

David Tabernero M.
la source
1
Je ne sais pas pourquoi, mais une erreur s'est 16.04produite lorsque j'ai essayé d'exécuter la commande que vous avez fournie. awk: line 1: syntax error at or near {Mais les accolades correspondent, alors je ne sais pas pourquoi cela ne fonctionne pas
Gabriel Fair
@GabrielFair Merci de l'avoir remarqué, en juin, cela fonctionnait (je l'ai copié-collé depuis ma console), mais il semble maintenant que cela a été mis à jour et que le apt-key listformat a changé. Maintenant, il semble fonctionner à nouveau. (EDIT: N'oubliez pas de lancer ceci en tant que superutilisateur)
David Tabernero M.