Пример, как можно использовать USB-брелок Yubikey в качестве смарткарты для хранения GPG-ключей и ключей для аутентификации на SSH-серверах.
Использование с GPG.
Подключаем Yubikey к порту USB и проверяем, что он определился:
Для переноса GPG-ключа на брелок запускаем "gpg --edit-key идентификатор_ключа" и выполняем в редакторе команду "keytocard" (внимание, закрытый ключ будет не скопирован, а перенесён, т.е. удалён с локальной машины, поэтому нужно заранее позаботиться о создании резервной копии).
Убедимся, что ключ переместился:
Для проверки создадим шифрованное сообщение и расшифруем его:
Настраиваем SSH-ключи.
Удостоверимся, что ключ аутентификации перенесён на Yubikey ("Authentication key" в выводе "gpg --card-status") и выполним экспорт открытого ключа SSH из Yubikey:
Далее, скопируем экспортированный ключ на SSH-сервер и настроим gpg-agent для работы в роли агента SSH:
Перезапустим агенты GPG/SSH:
Поменяем путь к сокету SSH_AUTH_SOCK на GPG. В ~/.bashrc:
Проверим, виден ли ключ SSH при подключении брелока:
Всё в порядке, теперь при подключении к серверу SSH будет использовать ключ с брелока Yubikey.
Использование с GPG.
Подключаем Yubikey к порту USB и проверяем, что он определился:
Код:
gpg --card-status
...
Version ..........: 2.1
Manufacturer .....: Yubico
Для переноса GPG-ключа на брелок запускаем "gpg --edit-key идентификатор_ключа" и выполняем в редакторе команду "keytocard" (внимание, закрытый ключ будет не скопирован, а перенесён, т.е. удалён с локальной машины, поэтому нужно заранее позаботиться о создании резервной копии).
Убедимся, что ключ переместился:
Код:
gpg --card-status | grep key
URL of public key : [...]
Signature key ....: [...] XXXX YYYY
Encryption key....: [...] ZZZZ VVVV
Authentication key: [...] AAAA BBBB
General key info..: sub rsa4096/QQQQQQ <foobar@domain.tld>
Для проверки создадим шифрованное сообщение и расшифруем его:
Код:
gpg --encrypt --output /tmp/message.txt.enc -r foobar@domain.tld /tmp/message.txt
gpg --decrypt /tmp/message.txt.enc
Настраиваем SSH-ключи.
Удостоверимся, что ключ аутентификации перенесён на Yubikey ("Authentication key" в выводе "gpg --card-status") и выполним экспорт открытого ключа SSH из Yubikey:
Код:
gpg --export-ssh-key 0xAAAABBBB
Далее, скопируем экспортированный ключ на SSH-сервер и настроим gpg-agent для работы в роли агента SSH:
Код:
echo 'enable-ssh-support' >> ~/.gnupg/gpg-agent.conf
Код:
killall gpg-agent
killall ssh-agent
gpg-agent --daemon
Поменяем путь к сокету SSH_AUTH_SOCK на GPG. В ~/.bashrc:
Код:
export SSH_AGENT_PID=""
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
Проверим, виден ли ключ SSH при подключении брелока:
Код:
ssh-add -l
4096 SHA256:XXXX cardno:0006064XXXX (RSA)