通过 ssh 使用 gpg-agent

Ton*_*ony 8 ubuntu ssh gpg env

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

这是我的配置:

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

ssh user@serverB "sudo -E /path/to/script.sh"
Run Code Online (Sandbox Code Playgroud)

服务器 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
Run Code Online (Sandbox Code Playgroud)

这是 /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
Run Code Online (Sandbox Code Playgroud)

因此,为了使其有效,我通过 ssh 连接到 serverB:

ssh user@serverB
Run Code Online (Sandbox Code Playgroud)

gpg-agent 启动,我手动触发脚本:

sudo -E /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)

然后,gpg-agent 提示我要求输入密码,一旦我设置了密码,我就可以再次运行脚本,它会在不要求输入密码的情况下完成它的任务。

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

ssh user@serverB "sudo -E /path/to/script.sh"
Run Code Online (Sandbox Code Playgroud)

似乎 gpg-agent 不起作用,因为脚本一直要求我输入密码。

编辑:

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

user ALL=(ALL)NOPASSWD:SETENV:/path/to/script.sh
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

v25*_*v25 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 代理进程,从而允许您的脚本利用基于密钥的登录。

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