有没有办法在远程服务器上使用gpg密钥在linux上通过gpg程序(命令行工具)进行签名?
我正在使用gpg通过测试密钥在localhost上签署二进制文件。现在我想使用服务器访问的相同类型的密钥。我只是通过更改gpg工具的参数来寻找实现。
答案 0 :(得分:3)
您可以使用OpenSSH>=6.7
和GnuPG>=2.1.
OpenSSH 6.7引入了unix套接字转发,用于转发gpg-agent套接字。并且GnuPG 2.1摆脱了secring.gpg
委托私钥管理到gpg-agent
。这样可以避免将私钥保留在远程计算机上。
首先,您要在本地客户端上设置一个额外的套接字。将此行添加到gpg-agent.conf
extra-socket /path/to/extra-socket
重新启动gpg-agent
pkill gpg-agent
gpg-connect-agent /bye
打开与远程服务器的ssh连接,并将服务器gpg-agent套接字转发回客户端(确保gpg-agent
尚未在远程服务器上运行)
ssh -R ${GNUPGHOME:-~/.gnupg}/S.gpg-agent:/path/to/extra-socket remote-server
注意:GNUPGHOME
是指 远程 上gnupg的主文件夹。 如果它与本地GNUPGHOME
不同,则您必须对此进行调整。
您现在应该可以在远程服务器上进行签名/加密,只要它在密钥环中有您的公钥。
注意:您可能需要向客户gpg-agent.conf
添加图形pinentry(qt,gtk),我不确定curses是否可以正常工作。
默认情况下,OpenSSH在关闭连接时不会删除服务器上转发的套接字。这将阻止OpenSSH在下次连接期间创建套接字。如果您有权访问服务器sshd_config
,则可以添加以下行
StreamLocalBindUnlink yes
或在您的退出脚本中删除它(.zlogout
,.bash_logout
,...)
rm ${GNUPGHOME:-~/gnupg}/S.gpg-agent