apt-key add-를 사용하여 추가 한 gpg 키를 어떻게 제거 할 수 있습니까? 않습니다. 그것을

더 이상 서버 키링에 키가 필요하지 않습니다. 그것을 제거 할 수 있습니까? 이 명령을 사용하여 키를 추가했습니다.

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

도움을 주셔서 감사합니다



답변

먼저 추가 한 키의 키 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
$


답변

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입니다.


답변

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: 더 이상이 파일이 필요하지 않습니다

답변

나는 늦을지도 모른다는 것을 알고 있지만 이것을 달성하기 위해이 한 줄 명령을 공유하고 싶었습니다.

참고 : 이것은 출력이 고유 키인 경우에만 작동합니다.


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

FOOBARUID 이름은 어디에 있습니까 ?


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}')

FOOBARUID 이름은 어디에 있습니까 ?


답변