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