GPG 代理如何工作?
我的 gpg.conf 文件中有一行寫著
use-agent
.我知道這是指 gpg-agent ,它是一個守護程序。手冊頁指出“gpg-agent 是一個獨立於任何協議來管理秘密(私有)密鑰的守護程序。它用作 gpg 和 gpgsm 以及其他幾個實用程序的後端。”
誰能解釋這在 gpg 的上下文中意味著什麼?gpg-agent 的意義何在?
我目前有 GPG 1.4。
- 如何判斷代理是否正在執行?實際上,我什至不清楚 gpg-agent 是否與基本的 GPG 1.4 軟體包一起安裝。
- 如果它沒有執行,我該如何啟動它?
- 如果它正在執行,我該如何停止它?
Gpg-agent 是一個在後台執行的程序(守護程序)並將 GPG 密鑰儲存在記憶體中。當 GPG 程序需要密鑰時,它會通過套接字聯繫正在執行的 gpg-agent 程序並請求密鑰。如果代理程序擁有密鑰,它會將其提供給 gpg。如果沒有,它會嘗試從您的密鑰環載入加密密鑰,並提示您輸入密鑰的密碼。一旦代理獲得了解密的密鑰,它就會將它傳遞給 gpg 程序。除了 GPG 密鑰之外,Gpg-agent 還可以類似地儲存 SSH 密鑰並將它們提供給 SSH 程序,就像
ssh-agent
SSH 附帶的程序一樣。使用密鑰代理的主要目的是讓您不必在每次使用密鑰時都輸入密碼。代理將密鑰一次又一次地保存在記憶體中。GPG 本身無法做到這一點,因為程序一旦完成工作就會終止。
密鑰代理可以做的另一件事是允許在遠端電腦上執行的 GPG 獲取本地代理中的密鑰(這可能會從本地文件載入它們並提示您輸入密碼)。Gpg-agent 還不能這樣做,這是一個計劃中的功能。SSH 已經有很長時間的代理轉發了。(這是不將 gpg-agent 用於 SSH 密鑰的原因。)
GPG 1.x 或 2.0.x 知道代理正在執行,因為
GPG_AGENT_INFO
設置了變數。此變數包含與代理通信的套接字的位置以及代理的程序 ID。GPG 2.1 總是將代理套接字放在~/.gnupg
. 如果一個代理程序沒有執行,GPG 2.x 總是啟動一個代理程序。您只需執行即可啟動代理
gpg-agent
。如果您想將代理程序作為會話的一部分,您可以將會話管理器的呼叫替換為gpg-agent my-session-manager
; 一些發行版會自動設置它。GPG 會自動啟動代理,GPG 2.1 會額外找到一個正在執行的代理,不需要環境變數,所以除非你使用舊版本的 GPG 或者你使用代理儲存其他類型,否則你不需要這樣啟動它SSH 等密鑰。您可以使用shell 命令發送代理命令。
gpg-connect-agent
發送kill
命令以終止代理程序(或向其發送信號)。Gpg-agent 自帶 GPG。一些發行版將它單獨打包。