Вопрос или проблема
С тех пор как OpenSSH стал поддерживать FIDO-ключи безопасности, я хочу использовать свои два Yubikey для хранения своих SSH-учетных данных. Я хотел бы иметь возможность войти на хост, используя любой из моих двух ключей с любого из моих (в основном Windows) клиентов, используя встроенный клиент OpenSSH (v9.5)
На данный момент я создал SSH-ключ на обоих ключах (скажем, SSH-ключ sA на Yubikey yA, аналогично sB/yB) и могу использовать любой из них для входа через SSH, указывая ключ, который нужно использовать, в команде SSH.
Это работает, но это неприятно, поэтому я попытался добавить оба ключа в ssh-agent с помощью ssh-add, и это почти сработало, за исключением того, что не отображается, какой ключ используется первым: при подключении он пробует SSH-ключи в порядке их добавления, скажем, sA, затем sB.
Из-за этого, если yA подключен и активирован (PIN + касание), все работает, но если только yB присутствует, я получаю всплывающее окно Windows с просьбой ввести PIN и касание, только чтобы получить ошибку, поскольку ключ не распознается. Затем ssh-agent пытается использовать sB, что работает после активации yB.
На данный момент это нормально, потому что я просто добавил ключи, но если (когда) я забуду этот порядок, у меня будет 50/50 шанс использовать правильный ключ с первой попытки.
Существует ли способ заставить ssh-agent спросить, какой ключ использовать перед попыткой использовать любой из них, или, может быть, использовать что-то другое для управления ключами?
Ответ или решение
Для решения вашей проблемы с использованием нескольких FIDO-ключей с ssh-agent
, к сожалению, встроенных средств для выбора ключа перед аутентификацией в OpenSSH нет. Однако, есть несколько методов и подходов, которые могут улучшить ваш опыт.
1. Использование ssh_config
для управления ключами
Вы можете настроить файл конфигурации SSH (~/.ssh/config
) так, чтобы использовать разные ключи для различных хостов или установить параметры для конкретного хоста. Например:
Host example1.com
IdentityFile ~/.ssh/id_yubikeyA
IdentitiesOnly yes
Host example2.com
IdentityFile ~/.ssh/id_yubikeyB
IdentitiesOnly yes
Этот подход позволит вам явно указать, какой ключ использовать для каждого хоста. Вы увидите, какой ключ будет использоваться на этапе подключения к хосту.
2. Использование отдельной командной оболочки с запросом ключа
Можно создать небольшую оболочку скрипта, которая будет запрашивать, какой ключ использовать, прежде чем запускать команду ssh
. Например:
#!/bin/bash
echo "Выберите ключ для использования:"
select key in "Ключ A" "Ключ B"; do
case $key in
"Ключ A")
ssh -i ~/.ssh/id_yubikeyA "$@"
break
;;
"Ключ B")
ssh -i ~/.ssh/id_yubikeyB "$@"
break
;;
*) echo "Неверный выбор";;
esac
done
Сохраните этот скрипт в файл, дайте ему права на выполнение (chmod +x
), и затем используйте его для подключения к вашим хостам.
3. Использование специального менеджера ключей
Если вам нужен более сложный менеджер для обработки ключей, вы можете рассмотреть использование нескольких инструментов, таких как gpg-agent
с поддержкой SSH или другие сторонние менеджеры ключей. GnuPG (GPG) поддерживает протоколы с HSM и FIDO и может управлять ключами более гибко.
4. Обучение
Наконец, вы также можете рассмотреть возможность запоминания порядка использования ключей, так как многие пользователи системы в конечном итоге привыкают к используемым устройствам. Но, конечно, это может быть утомительным, если вы часто меняете ключи.
Заключение
В целом, пока в OpenSSH нет способа для автоматического запроса ключа перед аутентификацией, вышеописанные методики помогут вам эффективно управлять вашими FIDO-ключами. Каждое решение имеет свои плюсы и минусы, и выбор будет зависеть от вашего рабочего процесса и предпочтений.