SSH、tmux 和 GnuPG 代理的最佳實踐

SSH、tmux 和 GnuPG 代理的最佳實踐

我正在嘗試將我的加密軟體整合到 GnuPG,但遇到了一個令人困惑的問題。

我的主要單位是無頭伺服器,並且我專門在 tmux 中工作。沒有 X 會話,因此我已將 gpg-agent 配置為使用 pinentry-curses。我已使用以下腳本將 gpg-agent 配置為在登入時使用 ssh-agent 模擬進行呼叫:

if pgrep -u "${USER}" gpg-agent >/dev/null 2>&1; then
    eval `cat $gnupginf`
    eval `cut -d= -f1 $gnupginf | xargs echo export`
else              
    eval `gpg-agent -s --enable-ssh-support --daemon`
fi

我已經將 ssh 金鑰新增至 gpg-agent,但是當我嘗試另一個 ssh 會話時,命令掛起。

我發現,如果我殺死 gpg-agent 並建立一個新的登入 shell,代理程式將按其應有的方式運作(呼叫 pinentry-curses 然後像 ssh-agent 一樣工作)。

但是,如果我建立另一個登入 shell(例如,彈出以開啟另一個 tmux 窗格)並嘗試 ssh,則該命令將掛起,並且 pinentry-curses 視窗將列印在最初啟動代理程式的登入 shell 的內容上。

此外,如果我關閉了最初啟動代理的 shell,pinentry-curses 無論如何都會被呼叫並導致 cpu 癱瘓的無限循環。 (已知錯誤,請參閱http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=559936.)

本質上,我想知道如何更改我的設定才能使 GnuPG 代理程式像 ssh-agent 一樣無縫工作。謝謝你的幫忙!

答案1

事實證明這個非常簡單。我沒有使用該腳本,而是簡單地從舊的鑰匙串啟動腳本中刪除了“--agents”選項(指南這裡)。

這會導致 Keychain 程式尋找 ssh-agent 和 gpg-agent 檔案。現在,即使依賴兩種類型的代理,我的加密系統也可以非常無縫地工作。

相關內容