Gpg-Agent

在不同會話之間使用 gpg-agent

  • August 18, 2016

我正在嘗試設置gpg-agent

當我登錄到我的機器(通過 SSH)並呼叫gpg時,它每次都要求輸入密碼(它不會gpg-agent自動啟動)。

當我開始gpg-agent手動使用時:

eval "$(gpg-agent --daemon)"

然後下一次呼叫gpg實際啟動代理,輸入我的密碼一次後,我可以在沒有密碼的情況下使用 gpg。另外,我看到一個套接字已經創建$HOME/.gnupg/S.gpg-agent=

當我註銷並再次登錄(ssh)時,我看到套接字仍然存在$HOME/.gnupg/S.gpg-agent=ps顯示代理正在執行,但每次呼叫都gpg要求輸入密碼,就好像沒有代理一樣。

我已將此添加到我的.bashrc

GPG_TTY=$(tty)
export GPG_TTY

但這似乎沒有幫助

我發現這種行為gpg-agent非常令人困惑。我熟悉ssh-agent並且行為簡單易懂。

我怎樣才能使用與使用gpg-agent相同的方式ssh-agent

為了比較,這是ssh-agent行為方式:

在我啟動我的機器並首次登錄後,我ssh-add手動啟動並輸入我的密碼片語一次。

然後,每次我登錄到我的機器(X、控制台、ssh、…)時,我都可以使用代理(我不需要再次輸入我的密碼)。這是通過添加以下行來完成的.bashrc

export SSH_AUTH_SOCK="$(find /tmp/ssh-*/agent.* -uid $(id -u) -type s -print -quit 2>/dev/null)"

gpg不查找套接字(這與新版本 2.1 不同)而是查找環境變數GPG_AGENT_INFO。這不是在登錄時設置的。這就是問題所在。顯然,您可以選擇use-standard-socketgpg-agent.conf套接字名稱始終相同。

您應該在登錄腳本中設置變數,然後執行一個簡單的腳本來檢查是否gpg-agent正在執行:

export GPG_AGENT_INFO=/path/to/your/HOME/.gnupg/S.gpg-agent:42:1
gpg-connect-agent /bye &>/dev/null || gpg-agent --daemon &>/dev/null

那是使用的部分gpg。對於 SSH,您還需要SSH_AUTH_SOCK. 設置兩個變數的最簡單方法是添加行

write-env-file "${HOME}/.gpg-agent-info

到配置文件gpg-agent.conf並在上述之後執行此腳本:

. "${HOME}/.gpg-agent-info"
export SSH_AUTH_SOCK

這在gpg-agent手冊頁中有說明。

引用自:https://unix.stackexchange.com/questions/170758