Respostas:
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
$
pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY
, o que devo fazer em seguida?
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) <cdimage@ubuntu.com>
O ID da chave será EFE21092
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).
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 <jcameron@webmin.com>
sub 1024g/1B24BE83 2002-02-28
Tenho certeza de que apenas a chave webmin no meu sistema possui o jcameron
que 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 costumegrep '${UNIQUE}' -B 1
: pegue apenas a linha que contém a cadeia de teclas exclusiva jcameron
e -B 1
a 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 pup
ID da chavecut -d " " -f 4
: pegue a quarta palavra dessa linha (a primeira é pub
que 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#
cláusula se é a culpada?
$#
então não. Retorna a quantidade de parâmetros fornecidos.
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.
16.04
comando 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 #
apt-key list
formato mudou. Agora parece estar funcionando novamente. (EDIT: Lembre-se de executar este como superusuário)
Software & Updates-->Authentication
do 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.