如何在远程服务器上使用gpg签名密钥?

ata*_*man 5 linux ssh gnupg

有没有办法在远程服务器上使用gpg密钥通过linux上的gpg程序(命令行工具)进行签名?

我正在使用gpg在localhost上使用测试密钥签署二进制文件.现在我想使用服务器访问的相同类型的密钥.我只是通过改变gpg工具的参数来寻找实现.

Ram*_*m-Z 8

你可以用OpenSSH>=6.7and来做到这一点GnuPG>=2.1.1

OpenSSH 6.7 引入了 unix 套接字转发,它将用于转发 gpg-agent 套接字。GnuPG 2.1 摆脱了将secring.gpg私钥管理委托给gpg-agent. 这避免了必须将私钥保留在远程计算机上。

首先,您需要在本地客户端上设置一个额外的套接字。将此行添加到您的gpg-agent.conf

extra-socket /path/to/extra-socket
Run Code Online (Sandbox Code Playgroud)

重新启动你的gpg-agent

pkill gpg-agent
gpg-connect-agent /bye
Run Code Online (Sandbox Code Playgroud)

打开到远程服务器的 ssh 连接并将服务器 gpg-agent 套接字转发回客户端(确保gpg-agent尚未在远程服务器上运行)

ssh -R ${GNUPGHOME:-~/.gnupg}/S.gpg-agent:/path/to/extra-socket remote-server
Run Code Online (Sandbox Code Playgroud)

注:GNUPGHOME 远程上 gnupg 的主文件夹。如果它与本地不同GNUPGHOME,您必须对此进行调整。

您现在应该能够在远程服务器上进行签名/加密,前提是它的密钥环中有您的公钥。

注意:您可能需要向您的客户端添加图形 pinentry (qt,gtk) gpg-agent.conf,我不确定诅咒是否会起作用。

默认情况下,OpenSSH 在关闭连接时不会删除服务器上转发的套接字。这将阻止 OpenSSH 在下一次连接期间创建套接字。如果您有权访问服务器,sshd_config您可以添加以下行

StreamLocalBindUnlink yes
Run Code Online (Sandbox Code Playgroud)

或在注销脚本中将其删除(.zlogout, .bash_logout, ...)

rm ${GNUPGHOME:-~/gnupg}/S.gpg-agent
Run Code Online (Sandbox Code Playgroud)

更多信息可以在这个 GnuPG wiki 页面上找到。https://wiki.gnupg.org/AgentForwarding