Como posso remover a chave gpg que adicionei usando o apt-key add -?

147

Não preciso mais da chave no chaveiro do meu servidor. É possível removê-lo? Eu adicionei a chave usando este comando:

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

Obrigado por ajudar

Raymond
fonte
Eu achei essa pergunta útil porque atualmente a GUI Software & Updates-->Authenticationdo Ubuntu 18.04 chamada parece não funcionar (não pode remover nenhuma chave de software confiável). Em vez disso, os cli cmds dados abaixo tiveram que ser usados.
Sun Bear

Respostas:

198

Primeiro, você precisa encontrar o ID da chave que você adicionou. Faça isso pelo comando:

sudo apt-key list

Ele listará todas as chaves que você possui, com cada entrada assim:

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

Depois de descobrir qual chave remover, use o comando sudo apt-key del <keyid>onde <keyid>é substituído pelo keyid real da chave que você deseja remover do seu chaveiro.

$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$
Nitin Venkatesh
fonte
@Raymond não esquenta :)
Nitin Venkatesh
11
Ah, vejo que o ID único está na linha denominada pub, não na linha denominada uid.
ctrl-alt-Delor
6
no Ubuntu 16.10 resultados parece um pouco diferente:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
mxdsp
Parece que isso precisa ser atualizado para 18.04
kennyB 16/02
Após excluir a chave, encontrei um novo problema The following signatures couldn't be verified because the public key is not available: NO_PUBKEY, o que devo fazer em seguida?
Corey
127

Em 16.10, o ID da tecla de atalho não é mais exibido quando você usa o comando list, mas na verdade são os últimos 8 caracteres do hexadecimal.

Por exemplo, o ID da chave a seguir

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

O ID da chave será EFE21092

Wesam
fonte
17
Muito útil, obrigado. Este é um UX extremamente inútil.
SColvin
11
@ SColvin você pode simplesmente fazer sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"e acho que é mais seguro usar toda a impressão digital, o keyid pode ter duplicatas (pelo menos quando você usa PGP para e-mails, eu li que você deveria compartilhar toda a impressão digital e não apenas o keyid).
baptx
11
Muito útil, muito verdadeiro também para 17.10!
Hartmut P.
2
E para 18.04.1.
Russ Bateman
Obrigado. Péssima decisão de design.
Brian Smith
4

Eu criei um script curto para facilitar as coisas e usar uma string em vez do id.

Você pode usar meu script se a chave contiver uma string única que você conhece.
por exemplo, no meu caso para webmin

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

Tenho certeza de que apenas a chave webmin no meu sistema possui o jcameronque eu uso esse script para remover a chave correspondente.

Salvei como ~/removeAptKey

e execute-o como

sudo ./removeAptKey jcameron

A saída deve ser algo como

KEYID: 11F63C51
OK

Aqui está o meu 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

Primeiro, recebo as duas linhas superiores do bloco da minha chave:

  • sudo apt-key list: lista as teclas apt como de costume
  • grep '${UNIQUE}' -B 1: pegue apenas a linha que contém a cadeia de teclas exclusiva jcamerone -B 1a linha antes
  • > result.temp: Salve-o em um arquivo (que é removido posteriormente)

Se isso retornar exatamente 2 linhas (-> obteve exatamente 1 tecla), seguirei em frente:

  • grep 'pub': Agora pegue apenas a linha com o pupID da chave
  • cut -d " " -f 4: pegue a quarta palavra dessa linha (a primeira é pubque vêm dois espaços, que a string que estamos depois de ``)
  • cut -d "/" -f 2: faça apenas a parte depois /

E, finalmente, exclua essa chave e limpeza

  • apt-key del ${KEYID}(no meu caso 11F63C51)
  • rm result.temp: não precisa mais desse arquivo
derHugo
fonte
Eu executei isso sem um parâmetro e ele acabou com todas as minhas chaves. ; (
Gabriel Fair
Se alguém tiver suas chaves apagadas, eu pude corrigi-lo seguindo estas instruções: askubuntu.com/a/145933/13693
Gabriel Fair
Hu? Como isso aconteceu? Ele deve sair com um "sem nome de chave fornecido" se não houver parâmetro ..
derHugo 22/12/18
@derHugo não tenho certeza, mas será que a #cláusula se é a culpada?
desativado em
@ deffeded se você quer dizer, $#então não. Retorna a quantidade de parâmetros fornecidos.
derHugo 9/04
2

Eu sei que posso estar atrasado, mas só queria compartilhar esse comando de uma linha para conseguir isso.

NOTA : Isso funcionará apenas se a saída for uma chave exclusiva.


Versões do Ubuntu até 16.04 (ATUALIZADO EM 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 "/")

onde FOOBARé o nome do UID.


Versões do Ubuntu a partir da 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}')

onde FOOBARé o nome do UID.

David Tabernero M.
fonte
11
Não sei por que, mas recebi um erro ao tentar executar o 16.04comando que você forneceu. awk: line 1: syntax error at or near {Mas as chaves angulares combinam, por isso não sei por que isso não funciona #
Gabriel Fair
@ GabrielFair Obrigado por perceber, em junho ele estava funcionando (copiei e colei no meu console), mas agora parece que ele foi atualizado e o apt-key listformato mudou. Agora parece estar funcionando novamente. (EDIT: Lembre-se de executar este como superusuário)
David Tabernero M.