Openssh

gpg-agent 拒絕 SSH 密鑰並 ssh-add 報告“代理拒絕操作”

  • January 17, 2019

我在arch linux上使用openssh7.5p1和gnupg 2.1.21(這些是arch附帶的預設版本)。我想gpg-agent用作 ssh 代理。我把以下內容放在我的~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-qt
enable-ssh-support

Arch 自動從 systemd 啟動一個 gpg-agent,所以我設置

export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh"

當我執行時ssh-add -l,它不報告任何身份並ps報告gpg-agent --supervised我所期望的程序。

不幸的是,當我執行時ssh-add,無論是什麼鍵類型,它都不起作用。這是我如何嘗試 dsa 的範例:

$ ssh-keygen -f testkey -t dsa -N ''
Generating public/private dsa key pair.
Your identification has been saved in testkey.
Your public key has been saved in testkey.pub.
$ ssh-add testkey
Could not add identity "testkey": agent refused operation

所有其他 gpg 功能正常工作(加密/解密/簽名)。此外,如果我直接將它們與 ssh 一起使用,我生成的密鑰可以正常工作,如果我執行ssh-agentopenssh 附帶的密鑰,它們可以正常工作。

文件說ssh-add應該將鍵添加到~/.gnupg/sshcontrol,但顯然沒有發生任何事情。

我的問題:將openssh生成的密鑰載入到的最簡單方法是什麼ssh-keygengpg-agent有人可以剪切並粘貼一個終端會話來顯示它是如何工作的嗎?

答案顯然是執行:

echo UPDATESTARTUPTTY | gpg-connect-agent

我不知道為什麼 pinentry 程序可以很好地用於其他用途,例如解密文件,但不適用於ssh-add.

雖然這現在有效,但它也會複製 ssh 私鑰的副本,該副本不會顯示在 下gpg -Kv,而且似乎不允許您更改私鑰上的密碼(因為您無法使用 編輯它--edit-key) . 基本上,我對這種方式gpg-agent讓你的秘密被複製的地方的可見性很低。如果您遇到這個問題是因為您希望gpg-agent可能是 的更好選擇ssh-agent,那麼我鼓勵您堅持ssh-agent而不是嘗試我的答案。首選的主要原因gpg-agent是如果您需要使用智能卡。

引用自:https://unix.stackexchange.com/questions/371901