在不同會話之間使用 gpg-agent
我正在嘗試設置
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-socket
讓gpg-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
手冊頁中有說明。