답변:
먼저 추가 한 키의 키 ID를 찾아야합니다. 다음 명령으로이를 수행하십시오.
sudo apt-key list
각 항목이 다음과 같이있는 모든 키가 나열됩니다.
pub 1024R/B455BEF0 2010-07-29
uid Launchpad clicompanion-nightlies
제거 할 키를 알아 낸 후에는 sudo apt-key del <keyid>
where 명령을 <keyid>
키링에서 제거하려는 키의 실제 키 ID로 바꿉니다.
$ 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
다음에 어떻게해야합니까?
16.10에서는 list 명령을 사용할 때 짧은 키 ID가 더 이상 표시되지 않지만 실제로는 긴 16 진수의 마지막 8 자입니다.
예를 들어 다음 키의 키 ID
/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>
키 ID는 EFE21092입니다.
sudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"
있고 전체 지문을 사용하는 것이 더 안전하다고 생각합니다. 키 ID에 중복이있을 수 있습니다 (적어도 이메일에 PGP를 사용할 때 키 ID뿐만 아니라 전체 지문을 공유해야한다고 읽었습니다).
id 대신 문자열을 사용하고 작업을 쉽게하기 위해 짧은 스크립트를 만들었습니다.
키에 고유 한 문자열이 포함되어 있으면 내 스크립트를 사용할 수 있습니다.
예를 들어 webmin의 경우
pub 1024D/11F63C51 2002-02-28
uid Jamie Cameron <jcameron@webmin.com>
sub 1024g/1B24BE83 2002-02-28
내 시스템의 webmin 키 만이이 jcameron
스크립트를 사용하여 해당 키를 제거하는 것보다 확실합니다 .
나는 그것을 ~/removeAptKey
로 실행
sudo ./removeAptKey jcameron
출력은 다음과 같아야합니다.
KEYID: 11F63C51
OK
내 스크립트는 다음과 같습니다.
#!/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
먼저 키 블록의 상단 두 줄을 얻습니다.
sudo apt-key list
: 평소대로 apt 키를 나열합니다grep '${UNIQUE}' -B 1
: 고유 키 문자열 jcameron
을 포함 -B 1
하는 행과 이전 행만 사용하십시오.> result.temp
: 파일로 저장 (나중에 제거)이것이 정확히 2 줄을 반환하면 (-> 정확히 1 키를 얻음) 계속 움직입니다.
grep 'pub'
: 이제 pup
키 ID가 있는 줄만 가져 가십시오.cut -d " " -f 4
: 그 줄의 네 번째 단어를 취하십시오 (첫 번째는 pub
``다음에 오는 문자열보다 두 칸 띄어옵니다)cut -d "/" -f 2
: 다음 부분 만 취하십시오 /
마지막 으로이 키를 삭제하고 정리하십시오.
apt-key del ${KEYID}
(내 경우에는 11F63C51
)rm result.temp
: 더 이상이 파일이 필요하지 않습니다#
if 절이 범인이라고 할 수 있습니까?
$#
. 주어진 매개 변수의 양을 반환합니다.
나는 늦을지도 모른다는 것을 알고 있지만 이것을 달성하기 위해이 한 줄 명령을 공유하고 싶었습니다.
참고 : 이것은 출력이 고유 키인 경우에만 작동합니다.
최대 16.04의 Ubuntu 버전 (업데이트 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 "/")
FOOBAR
UID 이름은 어디에 있습니까 ?
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}')
FOOBAR
UID 이름은 어디에 있습니까 ?
16.04
제공 한 명령 을 실행하려고 할 때 오류가 발생 했습니다. awk: line 1: syntax error at or near {
그러나 각도 괄호가 일치하므로 이것이 왜 작동하지 않는지 모르겠습니다.
apt-key list
. 이제 다시 작동하는 것 같습니다. (편집 : 수퍼 유저 권한으로 실행해야 함)
Software & Updates-->Authentication
가 작동하지 않는 것 같습니다 (신뢰할 수있는 소프트웨어 키를 제거 할 수 없음) 때문에 유용합니다 . 대신, 아래에 주어진 cli cmds를 사용해야했습니다.