Ssh
強制使用 gpg-key 作為給定伺服器的 ssh-key
我將 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 提供的身份,您也可以使用
IdentityFile
and 。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 代理那樣要求插入正確的卡。這很煩人,但不會影響您的實際使用。