Принудительное использование gpg-ключа в качестве ssh-ключа для данного сервера

Я настроил ssh на использование GPG в качестве моего ssh-агента, и если я удалю ~ / .ssh ], я могу подключиться к серверу по ssh, используя ключ gpg. Однако в моей папке ~ / .ssh есть более десятка различных ключей ssh, и если я попытаюсь использовать ssh, когда он там есть, я получаю ошибку отказа в разрешении, потому что мой клиент ssh предлагает все приватные введите в каталог, прежде чем пытаться использовать ключи в gpg ssh-agent.

С обычными ssh-ключами, Я просто использую конфигурацию IdentityFile в моем файле ~ / .ssh / config , но я не могу этого сделать, потому что моя личность - gpg cardno. Меня смущает, почему ssh предпочитает ключевые файлы агенту. Есть ли способ заставить ssh использовать агент вместо файлов? Или, что еще лучше, есть ли способ указать в файле ~ / .ssh / config , что ключ gpg должен использоваться для данного сервера?

Я подтвердил, что ssh-agent не запущен и что gpg-agent запущен, а ssh-add -L показывает, что мой ключ gpg присутствует вместе с одним другим закрытым ключом в стиле ssh.

4
задан 10 April 2018 в 08:35
3 ответа

Я не могу этого сделать, потому что моя личность - gpg cardno.

Вы можете использовать IdentityFile и ] IdentitiesOnly , даже с идентификаторами, предоставленными gnupg.

  • Если у вас есть карта, экспортируйте открытый ключ из вашего агента:

     $ ssh-add -L |  grep "cardno:. * 789 $" |  тройник ~ / .ssh / smartcard.pub
    ssh-rsa AAAA [..] == cardno: 023456000789
     
  • Если вы этого не сделаете, но помните, с каким ключом он связан, выполните экспорт из gnupg:

     $ gpg2 --export-ssh-key (скрытый) |  тройник ~ / .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 agent не будет просить вставить правильную карту, как это делает gpg agent . Это раздражает, но не повлияет на фактическое использование.

3
ответ дан 3 December 2019 в 03:05

man ssh_config говорит о IdentityFile:

Кроме того, любые идентификаторы, представленные агентом аутентификации, будут использоваться для аутентификации.

Итак, вы установили IdentityFile /dev/null, что одна аутентификация будет неудачной, затем ssh перейдет к пробованию ключей в вашем агенте.

.
3
ответ дан 3 December 2019 в 03:05

Если Ваш ключ хранится на каком-то аппаратном обеспечении, поддерживающем pkcs11, например, на смарт-карте, Вы можете использовать ssh непосредственно для доступа к нему.

CLI

 -I pkcs11
         Specify the PKCS#11 shared library ssh should use to communicate with a PKCS#11 token providing the user's private RSA key.

Таким образом, Вы можете использовать ssh -I /path/to/opensc-pkcs11. Так где opensc-pkcs11.so - библиотека Вашей смарт-карты.

Agent

Если Вы хотите использовать ssh-агент, Вы также можете добавить к нему ключи с поддержкой смарт-карты, используя ssh-add -s /path/to/opensc-pkcs11. Так

Config

И наконец, если вы хотите использовать конфигурационный файл, поэтому укажите устройство PKCS11, которое вы можете использовать PKCS11Provider

 PKCS11Provider
         Specifies which PKCS#11 provider to use.  The argument to this keyword is the PKCS#11 shared library ssh(1) should use to communi-
         cate with a PKCS#11 token providing the user's private RSA key.
0
ответ дан 3 December 2019 в 03:05

Теги

Похожие вопросы