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

时间:2015-05-05 16:06:20

标签: linux ssh gnupg

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

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

1 个答案:

答案 0 :(得分:3)

您可以使用OpenSSH>=6.7GnuPG>=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