回答:
最初に、追加したキーのキー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
$
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は表示されなくなりましたが、実際には長いヘックスの最後の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"
、指紋全体を使用する方が安全だと思います、keyidは重複する可能性があります(少なくとも電子メールにPGPを使用する場合は、keyidだけでなく指紋全体を共有する必要があります)
物事を簡単にするために短いスクリプトを作成し、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
:このファイルはもう必要ありません#
、if句が犯人であることはありますか?
$#
、いいえ。指定されたパラメーターの量を返します。
遅れる可能性があることは知っていますが、これを実現するためにこの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名です。
16.04
コマンドを実行しようとするとエラーが発生しました。awk: line 1: syntax error at or near {
しかし、角カッコは一致するので、これがなぜ機能しないのか
apt-key list
フォーマットが変更されているようです。今では再び機能しているようです。(編集:これをスーパーユーザーとして実行することを忘れないでください)
Software & Updates-->Authentication
していないようです(信頼できるソフトウェアキーを削除できないため)。代わりに、以下に示すCLIコマンドを使用する必要がありました。