在SSH上使用gpg-agent


8

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

这是我的配置:

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

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

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

系统信息:Ubuntu 12.04

我已经在服务器B上设置了gpg-agent,并将此配置添加到/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中代理的配置:

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-agent启动后,我手动触发了脚本:

sudo -E /path/to/script.sh

然后,gpg-agent提示我要求输入密码,一旦我设置了密码,就可以再次运行脚本,并且它在执行任务时无需输入密码。

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

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

似乎gpg-agent无法正常工作,因为脚本不断要求我输入密码。

编辑:

我已将以下内容添加到/etc/sudoers.d/user中,以便在没有sudo密码的情况下远距离触发脚本并保留环境变量:

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

有任何想法吗?


原谅这个问题,但您确定要输入密码吗?有了上面显示的内容,我希望它要求输入密码来验证sudo命令。
MadHatter

我已经使用NOPASSWD为试图远程运行的用户/命令管理了sudoers文件。我可能也需要对此进行精确调整。它要求我输入密码。
托尼

好,那是有道理的;感谢您的澄清,我只是想确保我们不会被明显的东西所咬住!
MadHatter

Answers:


1

当您登录并ssh user@serverB手动执行脚本时,它将在第一次提示您输入密码,然后在执行脚本时shh-agent将提供存储的密码。

但是,当您运行ssh user@serverB "sudo -E /path/to/script.sh时,每次都在进行新的登录,并且我认为ssh-agent不支持通过单独的SSH登录保存密码。

钥匙串似乎可以满足您的要求:http : //www.funtoo.org/Keychain

使用钥匙串,您只需在每次重启本地计算机时输入一次密码。钥匙串还使远程cron作业更容易安全地“挂接”到长时间运行的ssh-agent进程,从而使脚本可以利用基于密钥的登录。

当前版本的钥匙串支持gpg-agent和ssh-agent。


ssh连锁而言,您错了。我每天要这样做多次;ssh从主机A到主机B,然后到C,再到D,头部的ssh-agent始终执行关键操作。
MadHatter

我的理解是,他没有尝试使用该代理从A连接到B。服务器B被设置为ssh-agent客户端(出于所有目的和目的),并且当他sudo -E /path/to/script.sh在服务器B上执行时,此处需要输入密码。编辑:尽管,考虑到您的评论,将他配置为代理客户端并使用ssh-agent转发可能更有意义,这将使他能够在服务器B上执行脚本而不提示输入密码。
v25 2013年

好的,我将尝试在服务器A上设置gpg-agent。您获得了有关ssh-agent转发的一些信息?到目前为止,我已经看过这篇文章:superuser.com/questions/161973/…–
Tony

这是有据可查的,这里有一份指南:livecipher.blogspot.co.uk/2013/02/ssh-agent-forwarding.html
v25 2013年

v25,抱歉,您说的对。Tony,如果您在B上运行代理,它将永远无法工作,因为连接不是持久的。
MadHatter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.