Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

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

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

    $ 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 делает. Это раздражает, но не повлияет на фактическое использование.

Если ваш ключ хранится на каком-либо оборудовании с поддержкой 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.so где opensc-pkcs11.so - ваша библиотека смарт-карт.

Агент

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

Конфиг

И, наконец, если вы хотите использовать файл конфигурации, укажите устройство 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.