Я настроил 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.