透過 ssh 使用 gpg-agent

透過 ssh 使用 gpg-agent

我在透過單一命令列透過 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

有任何想法嗎?

答案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。

相關內容