SSH 密鑰簽名失敗
情景: 使用 SSH 密鑰驗證身份時
報錯:
sign_and_send_pubkey: signing failed: agent refused operation
環境: Debian 9.7 (Stretch)
解決方法:
1)確認問題
在 SSH 命令前添加“SSH_AUTH_SOCK=0”:
SSH_AUTH_SOCK=0 ssh <username>@<server>
如果可以正常登錄,而顯示變量 SSH_AUTH_SOCK
內容時輸出:
echo $SSH_AUTH_SOCK
/run/user/1000/keyring/ssh
則我們就可以確定是由 Gnome Keyring
帶的 SSH Agent
導致的密鑰簽名失敗問題。Gnome Keyring SSH Agent
並不能總是正確處理所有格式的 SSH 密鑰。但是它卻試圖處理所有的 SSH 密鑰,從而出錯。(典型的沒有金剛鑽,還要攬這瓷器活兒)
如果還是沒法正常登錄,說明是 ssh-agent
不存在或者存在但沒有找到密鑰。可以參考這里,幾條命令就可以解決。
2)解決問題
之前提到,如果 ssh
命令前面添加 SSH_AUTH_SOCK=0
后可以正常登錄,說明是 Gnome Keyring SSH Agent
在試圖處理它可能並不能處理的 SSH 密鑰編碼方式。那么解決方法就可以有兩種:禁用 Gnome Keyring SSH Agent
自啟動,或用 ssh-keygen
重新生成、上傳 Gnome Keyring SSH Agent
能夠處理的編碼方式所生成的公私鑰對。
其中,第二種方法在這篇博文中提到過。這種方法的優點是不用更改本地系統設置,缺點是需要更新所有服務器的公鑰,對於那些將公鑰上傳到多個服務(比如 GitHub,GitLab,DigitalOcean 等)的人來說需要做很多重復性操作,比較麻煩;
第一種方法會更改系統設置,但也只是最低限度的更改(僅禁用 Gnome Keyring
下的 SSH Agent
開機自啟動),幾乎不影響系統功能。因此,Gnome Keyring SSH Agent
完全可以由 OpenSSH
的 ssh-agent
替代。
具體方法如下:
- 打開搜索欄,搜索
Startup Applications
應用並運行(如果沒有安裝會提示安裝); - 在彈出的窗口中找到
SSH Key Agent GNOME Keyring: SSH Agent
,關閉自啟; - 重啟系統。
Written with StackEdit.