Mac 上的 gpg2:如何在終端機上輸入密碼而不是取得 GUI 提示?

Mac 上的 gpg2:如何在終端機上輸入密碼而不是取得 GUI 提示?

我正在使用 Mountain Lion,當我使用 gpg 加密檔案時,煩人的 GUI 會提示我輸入密碼。我希望在終端機中提示輸入密碼,而不是在外部 GUI 中。例如,我可能會遠端這樣做。

有沒有辦法讓 gpg for mac 在終端機中要求輸入密碼,而不是在 GUI 提示字元中要求輸入密碼?


更新:這對 gpg2 來說似乎很難,所以我已經降級到 gpg1。用 gpg2 (MacGPG2) 嘗試了一切,但沒有任何效果。糟透了!與 gpg1 一起工作正常!

答案1

以下假設您將 gnupg2 與 macports 一起使用,而不是 MacGPG2,但該修復可能適用於您的用例。

從 macports 安裝「pinentry」套件:

port -v install pinentry

編輯 ~/.gnupg/gpg-agent.conf 以適應:

pinentry-program /opt/local/bin/pinentry-curses

刪除或註解現有的「pinentry-program」條目。重新載入您的終端,或使用以下命令:

echo RELOADAGENT | gpg-connect-agent

完畢。您現在應該在終端機中有 pinentry/passphrase(詛咒對話框)。如果您希望擁有 inline-ttl pinentry 的舊 gpg v1.x 行為,您可以將自訂「./configure」命令與 macports pinentry 套件一起使用。

如果您之前安裝了適用於 Mac 的 MacGPG2 / GPG 工具,則可能需要在 pinentry 對話方塊執行(或重新啟動)之前終止「shutdown-gpg-agent」進程。

user$ ps ax |grep shutdown-gpg-agent
 1854   ??  S      0:00.01 /bin/bash /usr/local/MacGPG2/libexec/shutdown-gpg-agent

user$ kill -KILL 1854

答案2

ssh您可以透過檢查環境變數來檢查是否正在透過連線進行連線SSH_CONNECTION

export GPG_TTY=$(tty)
if [[ -n "$SSH_CONNECTION" ]] ;then
    export PINENTRY_USER_DATA="USE_CURSES=1"
fi

我使用以下檢查來檢查我是否運行過度ssh或過度:tmux

export GPG_TTY=$(tty)
if [[ -n "$SSH_CONNECTION" || -n "$TMUX" ]] ;then
    export PINENTRY_USER_DATA="USE_CURSES=1"
fi

來源

答案3

三個字:自己編譯。是的,你可以這麼做!不過,請務必先刪除 gpg-agent.conf 檔案!

答案4

我剛剛完成了 Mac OS High Sierra 的 GnuPG(版本 2.2.9)及其所有依賴項的編譯。這很有趣。在透過 libgcrypt 測試解決了一個小問題之後(在 Homebrew 的相應配方的幫助下),一切基本上都是開箱即用的。

在嘗試導入我的私鑰時,我無法導入,因為系統缺少 pinentry 程式。快速搜尋讓我登陸了這個頁面,但這並不是很有幫助,所以我決定自己編譯 pinentry。

根據我在 Linux 機器上使用 GnuPG 的經驗,我已經知道我希望在命令列的正常提示下輸入密碼,而不需要那些煩人的、破壞性的對話框。這就是我在這裡分享這個過程的原因。這很簡單,但可能會幫助遇到類似問題的人。

首先從 GnuPG 取得 pinentry 的原始碼。檢查他們的網站。在撰寫本文時,下載原始碼的連結是https://gnupg.org/ftp/gcrypt/pinentry/pinentry-1.1.0.tar.bz2。還下載簽名並使用 gpg 本身檢查真實性。

不要跳過驗證,這個很重要!該程式將有權存取您所有的 gpg 密碼和私鑰。您最好確保它是它聲稱的那樣!如果您遇到問題,請確保您已從 GnuPG 維護者處匯入金鑰(請參閱這裡):

$ gpg --verify pinentry-1.1.0.tar.bz2.sig pinentry-1.1.0.tar.bz2

現在您確定您正在使用真實的源文件,請提取原始程式碼並cd在該目錄中:

$ tar xvf pinentry-1.1.0.tar.bz2
$ cd pinentry-1.1.0

編譯非常簡單:

$ ./configure --enable-pinentry-tty
$ make
$ sudo make install

可能會configure抱怨缺少某些依賴項。在這種情況下,只需閱讀錯誤並從 GnuPG 網頁下載依賴項(請務必檢查下載的完整性!)。

上面指令的重要部分是 flag --enable-pinentry-tty。 Pinentry TTY 是在命令列上以非常正常且無聊的提示符號輸入密碼的最簡單方法。正是我想要的!如果我沒記錯的話,curses無論如何都會建立該版本。雖然它是一個 CLI 選項,但我發現它和其他選項一樣具有破壞性。

安裝完成後,您將在/usr/local/bin.確保您已接到電話pinentry-tty(如果沒有,則表示出了問題...)。

若要使該新二進位檔案成為輸入 gpg 密碼的預設方式,請將以下行新增至~/.gnupg/gpg-agent.conf(如果檔案和目錄尚不存在,則建立檔案和目錄):

pinentry-program /usr/local/bin/pinentry-tty

如果您立即嘗試,它可能不起作用,因為您很可能仍然有一個使用舊配置運行的 gpg-agent。繼續殺死所有 gpg 代理並創建一個新的:

$ sudo killall gpg-agent
$ gpg-agent --daemon

就是這樣!享受你的老式 TTY pinentry :)

相關內容