Позвольте ssh-agent запрашивать, какой FIDO-ключ использовать.

Вопрос или проблема

С тех пор как 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-ключами. Каждое решение имеет свои плюсы и минусы, и выбор будет зависеть от вашего рабочего процесса и предпочтений.

Оцените материал
Добавить комментарий

Капча загружается...