在ssh上使用gpg-agent

我通过一个命令行通过ssh使用gpg-agent时遇到问题。

这是我的configuration:

服务器A:通过ssh触发命令。

ssh user@serverB "sudo -E /path/to/script.sh" 

服务器B:执行需要密码签名的脚本。

系统信息:Ubuntu 12.04

我已经在服务器B上设置了gpg-agent,我已经将这个configuration添加到/home/user/.bashrc:

 Invoke GnuPG-Agent the first time we login. # Does `~/.gpg-agent-info' exist and points to gpg-agent process accepting signals? if test -f $HOME/.gpg-agent-info && \ kill -0 `cut -d: -f 2 $HOME/.gpg-agent-info` 2>/dev/null; then GPG_AGENT_INFO=`cat $HOME/.gpg-agent-info | cut -c 16-` else # No, gpg-agent not available; start gpg-agent eval `gpg-agent --daemon --write-env-file $HOME/.gpg-agent-info` fi export GPG_TTY=`tty` export GPG_AGENT_INFO 

以下是/home/user/.gnupg/gpg-agent.conf中代理的configuration:

 enable-ssh-support #1 year cache support default-cache-ttl 31536000 default-cache-ttl-ssh 31536000 max-cache-ttl 31536000 max-cache-ttl-ssh 31536000 #debug-all 

所以为了做到这一点,我通过ssh连接到serverB:

 ssh user@serverB 

gpg代理启动,我手动触发脚本:

 sudo -E /path/to/script.sh 

然后,gpg代理提示我要求一个密码,一旦我设置了密码,我可以再次运行脚本,而且它没有要求passhprase的任务。

我的问题是,当我尝试远程触发,例如通过:

 ssh user@serverB "sudo -E /path/to/script.sh" 

gpg-agent似乎不工作,因为脚本一直在问我一个密码。

编辑:

我已经将以下内容添加到/etc/sudoers.d/user,以便在不使用sudo密码的情况下远程触发脚本并保留环境variables:

 user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh 

有任何想法吗?

当你使用ssh user@serverBlogin,然后手动执行脚本,它会在第一次提示你input密码,然后当你执行脚本时,shh-agent会提供存储的密码。

但是,当你运行ssh user@serverB "sudo -E /path/to/script.sh你每次都会做一个新的login,而且我不认为ssh-agent会支持通过单独的SSHlogin保存密码。

钥匙串似乎做你需要: http : //www.funtoo.org/Keychain

使用钥匙串,每次本地计算机重新启动时,您只需input一次密码。 钥匙串还使远程cron作业可以轻松地“挂接”到长时间运行的ssh-agent进程,从而使您的脚本能够利用基于密钥的login。

当前版本的keychain支持gpg-agent和ssh-agent。