
我有一個加載了 gpg 金鑰的 Yubikey4,充當智慧卡。我可以做到gpg2 card-status
,它給了我整個shebang,顯示了我所有的子密鑰,一切都很好。
然後我想使用 gpg-agent 使用我的 gpg 金鑰 ssh 到遠端主機。我將以下內容添加到我的~/.gnupg/gpg-agent.conf
enable-ssh-support
pinentry-program /usr/bin/pinentry-curses
default-cache-ttl 60
我還在我的 .bashrc 中設定SSH_AUTH_SOCK
如下:
export SSH_AUTH_SOCK=~/.gnupg/S.gpg-agent.ssh
如果我隨後重新啟動計算機,則密鑰將被添加並可見ssh-add -l
4096 SHA256....... cardno: ..... (RSA)
但是任何 ssh 到遠端伺服器的嘗試都會掛起,ssh -vvv
告訴我機器嘗試簽名並發送金鑰,但代理拒絕操作。
如果我然後執行使用各種來源製作的腳本,那麼一切都會起作用。
killall gpg
export SSH_AUTH_SOCK=~/.gnupg/S.gpg-agent.ssh; gpg-agent --daemon --keet-tty --use-standard-socket --pinentry-program=/usr/bin/pinentry-curses
我嘗試使用 bashrc 實現此操作,並使用我的 deskopt-manager 和用戶 systemd 任務執行它,但無濟於事。
誰能幫我弄清楚如何在登入時自動啟動它,而不需要執行「我的腳本」?
答案1
簡短回答:
以 root 身分執行:
$ echo enable-ssh-support >> ~/.gnupg/gpg-agent.conf
# editor /etc/X11/Xsession.options
... comment out "use-ssh-agent" ...
# aptitude purge libpam-gnome-keyring
登出您的桌面會話並再次登錄,並檢查 $SSH_AUTH_SOCK 是否指向您的 gpg-agent。
解釋 :
預設情況下,gpg-agent 不啟用其 SSH 代理程式。這是透過傳遞--enable-ssh-support
命令列或透過向設定檔中新增一行(如上所示)來完成的。
二、其他SSH代理的問題。 OpenSSH 代理程式預設啟動,透過
/etc/X11/Xsession.d/90x11-common_ssh-agent
x11-common 套件進行設定。如果執行 GNOME,GNOME 密鑰環代理也會運作。這兩者都會幹擾我們的 GnuPG 代理。
禁用 OpenSSH 代理程式是透過/etc/X11/Xsession.options
如上所述進行編輯。
停用 GNOME 密鑰環代理可能會更複雜一些。使用 Xfce,可以卸載 libpam-gnome-keyring 軟體包並確保 Xfce 不會啟動 GNOME 服務(設定 → 會話和啟動 → 進階 → 啟動時啟動 GNOME 服務– 若勾選則取消勾選)。
故障排除
如果畢竟 SSH_AUTH_SOCK 仍未指向您的 gpg 代理,則可能有另一個代理程式仍在幹擾您的 GnuPG 代理程式。 SSH_AGENT_PID 變數應包含代理程式進程的 PID,這將有助於找出該代理程式。
答案2
將腳本放入/etc/profile.d
.確保可執行位元設定 ( chmod +x
) 且檔案具有.sh
副檔名。