Ssh
無法通過 SSH 使用從 GnuPG 導出的 OpenPGP 密鑰
一年多前,我用 GnuPG 生成了一個 PGP 密鑰。由於從那以後我再也沒有真正接觸過它,所以我對 GPG 的來龍去脈非常模糊(儘管我原則上理解非對稱密鑰加密)。我曾經使用這個密鑰來驗證 SSH 登錄,直到昨天意外刪除它。所以,今天,我開始再次生成它。
我執行
gpg --export-secret-key -a "Ryan Lue" > ~/.ssh/id_rsa
,它提示我輸入密碼。我輸入密碼,文件就出來了id_rsa
。現在,當我嘗試通過 SSH 連接到我的伺服器時,它會引發以下警告:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored.
於是,我乖乖
chmod 600 ~/.ssh/id_rsa
的。然後,我再試一次,它會提示輸入密碼(實際上,因為我在 Mac 上,Keychain 會提示我輸入密碼)。我輸入用於導出它的相同密碼,每次都失敗,在命令行上吐出以下錯誤:Saving password to keychain failed
我也嘗試過使用添加密鑰
ssh-agent
,這實際上提示我在命令行上輸入密碼:Enter passphrase for /Users/rlue/.ssh/id_rsa:
無論哪種方式,它都會不斷拒絕密碼。我 100% 確定我在這些提示中輸入了與導出它時相同的密碼:我已經成功導出了大約十幾次密鑰,但在使用中失敗了大約四打。
我錯過了什麼?
OpenPGP(由 GnuPG 實現)和 SSH 不共享通用密鑰格式,儘管它們依賴於相同的加密原理。
不過, GnuPG 實現了該
ssh-agent
協議,因此您仍然可以通過 GnuPG 使用您的 OpenPGP 密鑰通過 SSH 連接到其他電腦。
ssh-agent
通過添加enable-ssh-support
到啟用協議~/.gnupg/gpg-agent.conf
export SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.ssh
; 你可能想在你的~/.profile
ssh-agent
如果啟動則殺死並重新載入gpg-agent
(gpg-connect-agent reloadagent /bye
)- 將您的公鑰導出並添加到目標伺服器(
ssh-add -L
現在應該包含您熟悉的 OpenPGP 密鑰的 SSH 公鑰行)ssh
使用普通 SSH 密鑰到目標伺服器這也適用於 OpenPGP 智能卡或 USB 加密狗,我使用它通過 YubiKey 保護我的 SSH 密鑰。