Wie kann ich den mit apt-key add - hinzugefügten gpg-Schlüssel entfernen?

147

Ich brauche den Schlüssel nicht mehr im Schlüsselbund meines Servers. Ist es möglich, es zu entfernen? Ich habe den Schlüssel mit folgendem Befehl hinzugefügt:

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

Danke fürs Helfen

Raymond
quelle
Ich fand diese Frage hilfreich, da die aktuell aufgerufene Ubuntu 18.04-Benutzeroberfläche Software & Updates-->Authenticationnicht zu funktionieren scheint (sie kann keinen vertrauenswürdigen Softwareschlüssel entfernen). Stattdessen mussten die unten angegebenen Befehle verwendet werden.
Sun Bear

Antworten:

198

Zuerst müssen Sie die Schlüssel-ID des von Ihnen hinzugefügten Schlüssels finden. Tun Sie dies mit dem Befehl:

sudo apt-key list

Es werden alle Schlüssel aufgelistet, die Sie haben, wobei jeder Eintrag folgendermaßen aussieht:

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

Wenn Sie herausgefunden haben, welchen Schlüssel Sie entfernen möchten , verwenden Sie den Befehl sudo apt-key del <keyid>where, der <keyid>durch die tatsächliche Schlüssel-ID des Schlüssels ersetzt wird, den Sie aus Ihrem Schlüsselbund entfernen möchten.

$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$
Nitin Venkatesh
quelle
@ Raymond Kein Problem :)
Nitin Venkatesh
1
Ah, ich sehe, dass die eindeutige ID in der mit pub gekennzeichneten Zeile steht, nicht in der mit uid gekennzeichneten Zeile.
Strg-Alt-Delor
6
auf Ubuntu 16.10 Ergebnisse scheint ein wenig anders:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
mxdsp
Sieht so aus, als
müsste
Nach dem Löschen des Schlüssels ist ein neues Problem aufgetreten The following signatures couldn't be verified because the public key is not available: NO_PUBKEY. Was soll ich als Nächstes tun?
Corey
127

Am 16.10 wird die Kurzschlüssel-ID nicht mehr angezeigt, wenn Sie den Befehl list verwenden, sondern es sind tatsächlich die letzten 8 Zeichen des langen Hexadezimalzeichens.

So zum Beispiel die Schlüssel-ID für den folgenden Schlüssel

/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]>

Die Schlüssel-ID lautet EFE21092

Wesam
quelle
17
Sehr hilfreich, danke. Dies ist äußerst wenig hilfreich für UX.
SColvin
11
@SColvin können Sie einfach tun sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"und ich denke, es ist sicherer, den gesamten Fingerabdruck zu verwenden, die Keyid könnte Duplikate haben (zumindest wenn Sie PGP für E-Mails verwenden, sollte ich lesen, dass Sie Ihren gesamten Fingerabdruck und nicht nur die Keyid teilen sollten).
Taufe
1
Sehr hilfreich, sehr wahr auch für 17.10!
Hartmut P.
2
Und für den 18.04.1.
Russ Bateman
Danke. Schreckliche Designentscheidung.
Brian Smith
4

Ich habe ein kurzes Skript erstellt, um die Arbeit zu vereinfachen und anstelle der ID eine Zeichenfolge zu verwenden.

Sie können mein Skript verwenden, wenn der Schlüssel eine eindeutige Zeichenfolge enthält, die Sie kennen.
zB in meinem Fall für Webmin

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

Ich bin sicher, nur der Webmin-Schlüssel auf meinem System hat, jcameronals ich dieses Skript verwende, um den entsprechenden Schlüssel zu entfernen.

Ich habe es gespeichert als ~/removeAptKey

und starte es als

sudo ./removeAptKey jcameron

Die Ausgabe sollte ungefähr so ​​sein

KEYID: 11F63C51
OK

Hier ist mein Drehbuch:

#!/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

Zuerst bekomme ich die oberen zwei Zeilen meines Schlüsselblocks:

  • sudo apt-key list: listet die passenden Schlüssel wie gewohnt auf
  • grep '${UNIQUE}' -B 1: Nehmen Sie nur die Zeile, die die eindeutige Schlüsselzeichenfolge jcameronund -B 1die vorherige Zeile enthält
  • > result.temp: Speichern Sie es in einer Datei (die später entfernt wird)

Wenn dies genau 2 Zeilen ergibt (-> habe genau 1 Taste), gehe ich weiter:

  • grep 'pub': Nehmen Sie jetzt nur die Zeile mit der pupSchlüssel-ID
  • cut -d " " -f 4: nimm das 4. Wort dieser Zeile (das erste ist pubdann zwei Leerzeichen, als die Zeichenkette, hinter der wir stehen ``)
  • cut -d "/" -f 2: nimm nur den teil danach /

Und schließlich löschen Sie diesen Schlüssel und bereinigen

  • apt-key del ${KEYID}(in meinem Fall 11F63C51)
  • rm result.temp: brauche diese Datei nicht mehr
derHugo
quelle
Ich habe dies ohne Parameter ausgeführt und alle meine Schlüssel gelöscht. ; (
Gabriel Fair
Wenn die Schlüssel anderer Benutzer gelöscht wurden, konnte ich das Problem folgendermaßen beheben: askubuntu.com/a/145933/13693
Gabriel Fair
Hu? Wie ist es passiert? Es sollte mit einem "No key name provided" beendet werden, wenn es keinen Parameter gab.
derHugo
@derHugo nicht sicher, aber könnte es sein, dass die #in der if-Klausel der Schuldige ist?
9.
@defuzed wenn du meinst $#dann nein. Es gibt die Anzahl der angegebenen Parameter zurück.
derHugo
2

Ich weiß, dass ich zu spät komme, wollte aber nur diesen einzeiligen Befehl teilen, um dies zu erreichen.

HINWEIS : Dies funktioniert nur, wenn die Ausgabe ein eindeutiger Schlüssel ist.


Ubuntu-Versionen bis 16.04 (AKTUALISIERT am 22.12.2018):

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 "/")

Wo FOOBARist der UID-Name?


Ubuntu-Versionen ab 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}')

Wo FOOBARist der UID-Name?

David Tabernero M.
quelle
1
Ich bin nicht sicher, warum, aber ich habe eine Fehlermeldung erhalten, als ich versucht habe, den von 16.04Ihnen angegebenen Befehl auszuführen . awk: line 1: syntax error at or near {Aber die spitzen Klammern stimmen überein, daher bin ich mir nicht sicher, warum dies nicht funktioniert
Gabriel Fair
@ GabrielFair Vielen Dank, dass Sie bemerkt haben, dass es im Juni funktioniert hat (ich habe es von meiner Konsole kopiert), aber jetzt scheint es, dass es aktualisiert und das apt-key listFormat geändert wurde. Jetzt scheint es wieder zu funktionieren. (BEARBEITEN: Denken Sie daran, dies als Superuser auszuführen)
David Tabernero M.