GPG-Key fuer Repositories importieren

Wer unter Debian oder Ubuntu ein Repository, sprich eine Fremdquelle, manuell hinzufügt (deb-Zeile in sources.list(.d/) mit einem Editor oder über ein Frontend oder mit apt-add-repo), erhält nach “apt update” (in apt-add-repo enthalten) einen gpg-Error. In folgenden Beispielen ziehe ich TeamViewer heran.

$ sudo apt update
Hit:1 http://linux.teamviewer.com/deb stable InRelease
(...)                               
Err:1 http://linux.teamviewer.com/deb stable InRelease                                               
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY C5E224500C1289C0
(...)
Reading package lists... Done
Building dependency tree       
Reading state information... Done
All packages are up to date.
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://linux.teamviewer.com/deb stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY C5E224500C1289C0
W: Failed to fetch http://linux.teamviewer.com/deb/dists/stable/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY C5E224500C1289C0
W: Some index files failed to download. They have been ignored, or old ones used instead.
$

Das an sich ist wahrlich nichts neues, auch nicht, was zu tun ist, wird trotzdem immer wieder in Foren gefragt.

Im Fall TeamViewer kann man bislang ausführen:

1
wget -q https://download.teamviewer.com/download/linux/signature/TeamViewer2017.asc -O- | sudo apt-key add -

Man zieht also den Key im ASCII-Format vom teamviewer.com-Server (selbstverständlich über https) und importiert ihn mit apt-key. Das Paket add-apt-key ist auch für das kommende Ubuntu 22.04 Version 1.0-0.5, sage und schreibe 15 (!) Jahre alt. Entsprechend kann eine Message kommen:

$ sudo apt-key add TeamViewer2017.asc
Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8)).
OK
$

Das bedeutet, noch funktioniert es, ist aber abzulehnen, da die Methode über kurz oder lang entfernt wird. Entsprechend sollte man sich beizeiten informieren und am besten generell die ersetzende Methode verwenden.

GPG-Keys verwaltet man mit dem Kommando gpg und entsprechenden Optionen. Durch die obige Ausgabe wissen wir, es handelt sich um den Pubkey C5E224500C1289C0. Dies ist lediglich der rechte 16stellige Teil des 40stelligen rsa4096-Pubkeys 8CAE012EBFAC38B17A937CD8C5E224500C1289C0, genügt jedoch.

Wir könnten den Pubkey also mit “gpg –receive-keys” direkt von einem entsprechenden Keyserver ziehen und importieren. Das funktioniert, nur weiß apt davon nichts, die Fehlerausgabe besteht fort.

Es ist also so aufzubereiten, daß apt damit umgehen kann. Dabei kann mit wget das .asc-File gezogen, der relevante Teil über “gpg –dearmor” umgewandelt und über install oder gpg importiert werden.

Beispiel als Zweizeiler mit wget und install nach “/etc/apt/trusted.gpg.d/”:

1
2
wget -q https://download.teamviewer.com/download/linux/signature/TeamViewer2017.asc -O- | gpg --dearmor > teamviewer2017.gpg
sudo install -o root -g root -m 644 teamviewer2017.gpg /etc/apt/trusted.gpg.d/

Beispiel als Einzeiler mit wget und tee nach “/etc/apt/trusted.gpg.d/”:

1
wget -q https://download.teamviewer.com/download/linux/signature/TeamViewer2017.asc -O- | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/teamviewer2017.gpg >/dev/null

Beispiel als Einzeiler mit wget und tee nach “/usr/share/keyrings/”:

1
wget -q https://download.teamviewer.com/download/linux/signature/TeamViewer2017.asc -O- | gpg --dearmor | sudo tee /usr/share/keyrings/teamviewer2017.gpg >/dev/null

Beide Pfade sind möglich. Bei “/usr/share/keyrings/” erscheint der Key dann auch in software-properties* → Authentication, kann also auch dort wieder entfernt werden, so man möchte.

Hat man mit gpg bereits importiert oder möchte es so, kann man auch dies als Ausgangslage nutzen.

Beispiel als Dreizeiler mit gpg und tee nach “/usr/share/keyrings/”:

1
2
3
sudo gpg --receive-keys --keyserver hkps://keyserver.ubuntu.com --recv-keys C5E224500C1289C0
sudo gpg -a --output TeamViewer2017.asc --export C5E224500C1289C0
cat TeamViewer2017.asc | gpg --dearmor | sudo tee /usr/share/keyrings/teamviewer2017.gpg >/dev/null

Im Beispielfall TeamViewer kann man den mit gpg importierten Pubkey danach auch wieder entfernen:

1
sudo gpg --delete-keys C5E224500C1289C0

Der für apt relevante “/usr/share/keyrings/teamviewer2017.gpg” bleibt dabei erhalten.

Hinweis noch zum Copypasten: Das WP-Plugin für Code ist zwar optisch OK, aber etwas tricky. Also aufpassen, daß man Befehlszeilen vollständig in ein Terminal kopiert!