web-dev-qa-db-ja.com

apt-key add-を使用して追加したgpgキーを削除するにはどうすればよいですか?

サーバーのキーリングにキーはもう必要ありません。削除することは可能ですか?このコマンドを使用してキーを追加しました。

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

助けてくれてありがとう

144
Raymond

最初に、追加したキーのキーIDを見つける必要があります。次のコマンドでこれを行います。

Sudo apt-key list

所有しているすべてのキーがリストされ、各エントリは次のようになります。

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

削除するキーを特定したら、Sudo apt-key del <keyid>コマンドを使用します。<keyid>は、キーリングから削除するキーの実際のキーIDに置き換えられます。

$ Sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$
196
Nitin Venkatesh

16.10では、listコマンドを使用したときに短いキーIDは表示されなくなりましたが、実際には長いヘックスの最後の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) <[email protected]>

キーIDはEFE21092になります

123
Wesam

簡単にするために短いスクリプトを作成し、IDの代わりに文字列を使用しました。

キーに既知の一意の文字列が含まれている場合は、スクリプトを使用できます。
例えば。私の場合、webminの場合

pub   1024D/11F63C51 2002-02-28
uid                  Jamie Cameron <[email protected]>
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

最初に、キーのブロックの上の2行を取得します。

  • Sudo apt-key list:通常通りaptキーをリストします
  • grep '${UNIQUE}' -B 1:一意のキー文字列を含む行のみを取得jcameronおよび-B 1前の行
  • > result.temp:ファイルに保存します(後で削除されます)

これがちょうど2行を返す場合(->ちょうど1つのキーを取得しました)に進みます

  • grep 'pub'pupキーIDを持つ行のみを取得します
  • cut -d " " -f 4:その行の4番目の単語を取得します(最初はpubで、2つのスペースが来ます。
  • cut -d "/" -f 2/の後の部分のみを取得します

そして最後にこのキーを削除してクリーンアップします

  • apt-key del ${KEYID}(私の場合は11F63C51
  • rm result.temp:このファイルはもう必要ありません
4
derHugo

私は遅れる可能性があることを知っていますが、これを達成するためにこの1行のコマンドを共有したかっただけです。

NOTE:これは、出力が一意のキーである場合にのみ機能します。


buntuバージョン16.04まで(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からのUbuntuのバージョン:

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名です。

2