如何修复:由于公钥不可用,无法验证以下签名:NO_PUBKEY

std*_*err 46 apt key debian-jessie

我正在 Debian 8(待升级)上开发嵌入式系统。当我这样做时apt update,我得到以下信息:

...
...
Hit http://deb.debian.org stable/contrib arm64 Packages
Hit http://deb.debian.org stable/non-free arm64 Packages                       
Fetched 116 kB in 19s (6011 B/s)                                               
Reading package lists... Done
Building dependency tree       
Reading state information... Done
109 packages can be upgraded. Run 'apt list --upgradable' to see them.
W: GPG error: http://deb.debian.org stable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 648ACFD622F3D138 NO_PUBKEY 0E98404D386FA1D9 NO_PUBKEY 605C66F00D6C9793
Run Code Online (Sandbox Code Playgroud)

我试过:

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 
Run Code Online (Sandbox Code Playgroud)

但得到:

Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --homedir /tmp/tmp.mXChDvLgjA --no-auto-check-trustdb --trust-model always --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyring /etc/apt/trusted.gpg.d/debian-archive-jessie-automatic.gpg --keyring /etc/apt/trusted.gpg.d/debian-archive-jessie-security-automatic.gpg --keyring /etc/apt/trusted.gpg.d/debian-archive-jessie-stable.gpg --keyring /etc/apt/trusted.gpg.d/debian-archive-squeeze-automatic.gpg --keyring /etc/apt/trusted.gpg.d/debian-archive-squeeze-stable.gpg --keyring /etc/apt/trusted.gpg.d/debian-archive-wheezy-automatic.gpg --keyring /etc/apt/trusted.gpg.d/debian-archive-wheezy-stable.gpg --keyserver hkp://p80.pool.sks-keyserver.net:80 --recv-keys 605C66F00D6C9793
gpg: requesting key 0D6C9793 from hkp server p80.pool.sks-keyserver.net
?: p80.pool.sks-keyserver.net: Host not found
gpgkeys: HTTP fetch error 7: couldn't connect: No such file or directory
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

# gpg --keyserver pgp.mit.edu --recv-keys 648ACFD622F3D138 0E98404D386FA1D9 605C66F00D6C9793
Run Code Online (Sandbox Code Playgroud)

返回:

gpg: requesting key 22F3D138 from hkp server pgp.mit.edu
gpg: requesting key 386FA1D9 from hkp server pgp.mit.edu
gpg: requesting key 0D6C9793 from hkp server pgp.mit.edu
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 3CBBABEE: public key "Debian Archive Automatic Signing Key (10/buster) <ftpmaster@debian.org>" imported
gpg: key 8DD47936: public key "Debian Archive Automatic Signing Key (11/bullseye) <ftpmaster@debian.org>" imported
gpg: key 0D6C9793: public key "Debian Stable Release Key (11/bullseye) <debian-release@lists.debian.org>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 3
gpg:               imported: 3  (RSA: 3)
Run Code Online (Sandbox Code Playgroud)

# apt update在之后运行仍然给我NO_PUBKEY错误。我该如何正确解决这个问题?我的资料来源如下:

cat /etc/apt/sources.list.d/multistrap-debian.list 
deb [arch=arm64] http://deb.debian.org/debian stable main contrib non-free
deb-src http://deb.debian.org/debian stable main contrib non-free
Run Code Online (Sandbox Code Playgroud)

std*_*err 61

我能够通过以下方法解决这个问题:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 605C66F00D6C9793 \
    0E98404D386FA1D9 648ACFD622F3D138
Run Code Online (Sandbox Code Playgroud)

看起来 ubuntu 服务器也包含 debian 密钥。

  • @stdcerr `apt-key` 现已[已弃用](https://opensource.com/article/22/9/deprecated-linux-apt-key)。您能为未来的读者添加处理此问题的正确方法吗?谢谢。 (33认同)
  • 我必须为密钥服务器指定不同的端口:`hkp://keyserver.ubuntu.com:80`请参阅https://unix.stackexchange.com/a/399091/78382 (6认同)
  • 在 debian 10 主机上的 ubuntu 22.04 docker 镜像中,这不起作用。错误是`E:gnupg、gnupg2和gnupg1似乎没有安装,但此操作需要其中之一命令'/bin/sh -c apt-key adv --keyserver keyserver.ubuntu.com --recv -keys 871920D1991BC93C' 返回一个非零代码:255` 在我的例子中,我必须使用 ubuntu 20.04 映像或更年轻的 debian。 (4认同)
  • 在我的情况下需要“sudo” (3认同)