Я настроил 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.
Я не могу этого сделать, потому что моя личность - 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 . Это раздражает, но не повлияет на фактическое использование.
man ssh_config
говорит о IdentityFile:
Кроме того, любые идентификаторы, представленные агентом аутентификации, будут использоваться для аутентификации.
Итак, вы установили IdentityFile /dev/null
, что одна аутентификация будет неудачной, затем ssh перейдет к пробованию ключей в вашем агенте.
Если Ваш ключ хранится на каком-то аппаратном обеспечении, поддерживающем 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.