Ssh

強制使用 gpg-key 作為給定伺服器的 ssh-key

  • April 23, 2019

我將 ssh 配置為使用 GPG 作為我的 ssh 代理,如果我刪除該~/.ssh文件夾,我可以使用我的 gpg 密鑰 ssh 進入我的伺服器。但是,我的~/.ssh文件夾中有十幾個不同的 ssh 密鑰,如果我在它存在時嘗試 ssh,我會收到權限被拒絕錯誤,因為我的 ssh 客戶端在嘗試使用目錄中的密鑰之前提供目錄中的每個私鑰gpg ssh 代理。

使用正常的 ssh-keys,我只使用文件中的IdentityFile配置~/.ssh/config,但我不能這樣做,因為我的身份是 gpg cardno。我對為什麼 ssh 更喜歡密鑰文件而不是代理感到困惑。有沒有辦法強制 ssh 使用代理而不是文件?或者更好的是,有沒有辦法在~/.ssh/config文件中指定 gpg 密鑰必須用於給定伺服器?

我已經確認它ssh-agent沒有執行並且gpg-agent正在執行並ssh-add -L顯示我的 gpg 密鑰以及一個其他 ssh 樣式的私鑰。

我不能這樣做,因為我的身份是 gpg cardno。

即使是 gnupg 提供的身份,您也可以使用IdentityFileand 。IdentitiesOnly

  • 如果您有卡,請從您的代理導出公鑰:
$ ssh-add -L | grep "cardno:.*789$" | tee ~/.ssh/smartcard.pub
ssh-rsa AAAA[..]== cardno:023456000789
  • 如果沒有,但要記住它與哪個鍵相關聯,請從 gnupg 導出:
$ gpg2 --export-ssh-key ronnie.smart@card.example | tee ~/.ssh/smartcard.pub
ssh-rsa AAAA[..]== openpgp:0xDEADBEEF

然後告訴 ssh 使用該導出來辨識正確的密鑰:

Host *.host.example
   IdentityFile ~/.ssh/smartcard.pub
   IdentitiesOnly yes
   PasswordAuthentication no
   PubkeyAuthentication yes

當 gnupg 檢測到正確的智能卡時,這會為您提供一次準確的登錄嘗試:

$ ssh -v smart.host.example
[..]
debug1: Next authentication method: publickey
debug1: Offering public key: /home/home/.ssh/smartcard.pub RSA SHA256:a1337[..] explicit

不幸的是,每當您忘記插入卡時,您都會得到相當無用的輸出,因為gnupg ssh 代理不會像gpg 代理那樣要求插入正確的卡。這很煩人,但不會影響您的實際使用。

引用自:https://serverfault.com/questions/906871