Ssh

無法通過 SSH 使用從 GnuPG 導出的 OpenPGP 密鑰

  • June 28, 2017

一年多前,我用 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 連接到其他電腦。

  1. ssh-agent通過添加enable-ssh-support到啟用協議~/.gnupg/gpg-agent.conf
  2. export SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.ssh; 你可能想在你的~/.profile
  3. ssh-agent如果啟動則殺死並重新載入gpg-agentgpg-connect-agent reloadagent /bye
  4. 將您的公鑰導出並添加到目標伺服器(ssh-add -L現在應該包含您熟悉的 OpenPGP 密鑰的 SSH 公鑰行)
  5. ssh使用普通 SSH 密鑰到目標伺服器

這也適用於 OpenPGP 智能卡或 USB 加密狗,我使用它通過 YubiKey 保護我的 SSH 密鑰。

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