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


147

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

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

助けてくれてありがとう


現在、Ubuntu 18.04 GUIと呼ばれるGUIが機能Software & Updates-->Authenticationしていないようです(信頼できるソフトウェアキーを削除できないため)。代わりに、以下に示すCLIコマンドを使用する必要がありました。
マレーグマ

回答:


198

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

sudo apt-key list

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

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

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

$ sudo apt-key del B455BEF0
$ apt-key list | grep clicompan
$

@Raymond問題ありません:)
ニティン

1
一意のIDは、uidというラベルの行ではなく、pubというラベルの行にあります。
ctrl-alt-delor

6
ubuntu 16.10の結果は少し異なるようです:pub rsa4096 2012-05-11 [SC] 8439 .... uid ....
mxdsp

これは18.04
kennyB

キーを削除した後、新しい問題が発生The following signatures couldn't be verified because the public key is not available: NO_PUBKEYしました。次に何をすればよいですか?
コーリー

127

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) <cdimage@ubuntu.com>

キーIDはEFE21092になります


17
とても助かります、ありがとう。これは非常に役に立たないUXです。
-SColvin

11
@SColvinはあなたができることでありsudo apt-key del "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092"、指紋全体を使用する方が安全だと思います、keyidは重複する可能性があります(少なくとも電子メールにPGPを使用する場合は、keyidだけでなく指紋全体を共有する必要があります)
baptx

1
17.10でも非常に役立ちます。
ハートマットP.

2
そして18.04.1。
ラス・ベイトマン

ありがとうございました。ひどいデザインの決定。
ブライアンスミス

4

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

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

pub   1024D/11F63C51 2002-02-28
uid                  Jamie Cameron <jcameron@webmin.com>
sub   1024g/1B24BE83 2002-02-28

jcameronこのスクリプトを使用して対応するキーを削除するよりも、システム上のwebminキーだけが持っていると確信しています。

として保存しました ~/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:このファイルはもう必要ありません

パラメータなしでこれを実行しましたが、すべてのキーが消去されました。;(
ガブリエルフェア

他の誰かがキーを消去した場合、次の手順に従って修正できました。askubuntu.com
Gabriel Fair

胡?どうしてそうなった?何のパラメータがなかった場合は「ありませんキー名」で終了する必要があり...
derHugo

@derHugoは確かではありませんが#、if句が犯人であることはありますか?
defuzed

@defuzedを意味する場合は$#、いいえ。指定されたパラメーターの量を返します。
derHugo

2

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

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


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


1
理由はわかりませんが、指定した16.04コマンドを実行しようとするとエラーが発生しました。awk: line 1: syntax error at or near {しかし、角カッコは一致するので、これがなぜ機能しないのか
ガブリエルフェア

@GabrielFair気づいてくれてありがとう、6月に機能していました(コンソールからコピーアンドペーストしました)が、今は更新されてapt-key listフォーマットが変更されているようです。今では再び機能しているようです。(編集:これをスーパーユーザーとして実行することを忘れないでください)
デビッドタベルネロM.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.