IT-LINUXMAKER, OpenSource, Tutorials

GPG-Fehler „NO_PUBKEY …“ bei apt beheben (Debian/Ubuntu)

Wenn beim Ausführen von 

~# apt-get update

folgende Warnung erscheint,

W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. 
W: GPG error: example.repo.org stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A2FB21D5A8772835

bedeutet das:
Der öffentliche GPG-Schlüssel, mit dem das Repository signiert wurde, fehlt auf dem aktuellen System. Denn APT überprüft anhand digitaler Signaturen beim Herunterladen von Paketlisten (Indexdateien), ob die Quelle vertrauenswürdig ist.
Wenn der passende öffentliche Schlüssel nicht vorhanden ist, schlägt diese Überprüfung fehl – und APT lädt keine Pakete von dort.

Damit man weiterhin mittels dem Paketmanager APT die Pakete installieren kann, muss man die öffentliche Schlüssel der jeweiligen Repositories auf das eigene System herunterladen. Das ist auf zwei Methoden möglich.

Mit apt-key (nicht mehr empfehlenswert!)

~# apt-key adv --keyserver keyserver.ubuntu.com --recv-keys A2FB21D5A8772835

Diese Methode ist auf Debian- und Ubuntu-Systemen veraltet und nicht mehr empfohlen. Denn es besteht ein Sicherheitsrisiko durch globale Vertrauensstellung dadurch, dass mit apt-key hinzugefügten Schlüssel in einer einzigen Datei /etc/apt/trusted.gpg landen. Diese Schlüssel gelten global für alle Repositories – das bedeutet, dass
ein einziger kompromittierter Schlüssel Zugriff auf alle APT-Quellen erlauben würde.

Die Lösung stellen repository-spezifische Schlüssel dar

Die neueren Debian-/Ubuntu-Versionen unterstützen mittlerweile /etc/apt/trusted.gpg.d/. Hier wird jeder Schlüssel in einer eigenen Datei gespeichert. Somit können diese Dateien gezielt einzelnen Repositories zugeordnet werden. Das ermöglicht eine bessere Kontrolle und Trennung von Vertrauensquellen.

Empfohlene Methode zum Hinzufügen von GPG-Schlüsseln

Die meisten Repositories stellen eine URL für ihre öffentlichen Schlüssel zur Verfügung. Diese lassen sich herunterladen und von ASCII in das Binary-GPG konvertieren.

Das kann man wahlweise mit

~# wget -qO - example.com/repo.gpg | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/repo.gpg > /dev/null

oder mit

~# curl -fsSL example.com/repo.gpg | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/repo.gpg > /dev/null

erledigen.

In jedem der beiden Methoden muss das lokale APT-Repository erneut eingelesen werden, was diesmal ohne Fehlermelgung klappen sollte.

~# apt-get update

Wenn die Fehlermeldung Bestand hat

Sollte die Fehlermeldung weiterhin auftreten. Dann ist es sehr gut möglich, dass noch der alte Schlüssel in der Datei /etc/apt/trusted.gpg vorhanden ist. Mit dem Löschen des Schlüssels aus dieser Datei sollte sich das Problem lösen.

~# apt-key del 32EE5355A6BC6E42
~# apt-get update

Manche Pakete haben aber ihre öffentlichen Schlüssel woanders abgelegt. In diesem Fall hilft dieser Workflow.

~# apt-key list

Das listet alle verwendeten Schlüssel und deren Speicherort auf. Außerdem kann der Blick in die jeweilige Repository-Datei helfen.

~# cat /etc/apt/sources.list.d/google-chrome.list
deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome.gpg] dl.google.com/linux/chrome/deb/ stable main

In diesem Fall von Google-Chrome liegt der Schlüssel in /usr/share/keyrings/google-chrome.gpg und man braucht nur den Befehl anzupassen.

~# curl -fsSL dl.google.com/linux/linux_signing_key.pub | gpg --dearmor | sudo tee /usr/share/keyrings/google-chrome.gpg > /dev/null
~# apt-get update