Я надеюсь реализовывать подписанные сертификаты для аутентификации SSH. Я выполнил шаги здесь, и теперь пытаюсь выяснить, как я собираюсь реализовать его в своих системах.
Как пример, у нас есть две среды: Производство и Тестирование; каждый с их собственным "пользовательским ключом" для подписания других ключей. Я хочу смочь управлять, кто может получить доступ к каждой среде, но неудобство, с которым я сталкиваюсь, позволяет одному пользователю получать доступ к обеим средам с тем же закрытым ключом.
Из страницы справочника 'ssh' под '-i identity_file':
ssh также попытается загрузить информацию о сертификате из имени файла, полученного путем добавления-cert.pub к именам файлов идентификационных данных
Это, кажется, подразумевает, что я должен был бы иметь несколько копий закрытого ключа (просто названный по-другому) и назвать файл сертификата соответственно в дополнение к добавлению .ssh/config записи файла для него для использования корректного сертификата.
Это - мое понимание, что при определении нескольких записей IdentityFile в .ssh/config ssh будет судить каждого из них. Однако, кажется, нет опции (по крайней мере ни один, что я могу найти в документации) указывать сертификат.
Существует ли путь к любому, указывают файл сертификата (кроме принятого-cert.pub) в .ssh/config или файле, который содержит список сертификатов для проверки?
Я не знаю хорошего способа сделать это, но я знаю два способа.
Кажется, агент ssh-agent вполне счастлив хранить несколько сертификатов для одной личности. Так что если у вас, например, есть id_ed25519
в качестве идентификатора и id_ed25519-cert1.pub
и id_ed25519-cert2.pub
, вы можете сделать так:
cp id_ed25519-cert1.pub id_ed25519-cert.pub
.
ssh-add id_ed25519
cp id_ed25519-cert2.pub id_ed25519-cert.pub
ssh-add id_ed25519
И теперь оба сертификата можно использовать с идентификацией. Опять же, это не очень удачное решение.
Создайте сим-ссылки для дополнительных идентификаторов, которые указывают на одну и ту же идентичность, и дайте каждому свой сертификат. Или скопируйте их прямо. Опять же, уродливо, но должно сработать.
У вас может возникнуть соблазн поместить несколько сертификатов (поскольку они - каждая по одной строке) в один файл -cert.pub. В моей системе это распознаёт только первую строку.
Для дополнительного удовольствия обратите внимание, что подпись удостоверения личности с помощью сертификата перезапишет без подтверждения существующий сертификат.
Основная проблема здесь, на мой взгляд, в том, что та же самая модель, которая работает с CA для хостов, не работает для авторизованных пользователей. Подпись ключа хоста (предполагая, что вы указываете принципала) - это утверждение аутентификации -- оно гласит только то, что этой подписью вы знаете, что ключ хоста сервера идентифицирует его законно.
Подпись ключа пользователя также передает аутентификацию , но здесь у вас дополнительная проблема с авторизацией - подпись ЦС указывает как на то, что ключ идентифицирует пользователя легитимно так и на то , что пользователю должно быть позволено войти в систему.
Ключи хоста и ключи пользователя на самом деле не являются двойными, так как инициирование рукопожатия с сервером не сравнимо с входом в систему (даже с ограничениями ваших возможностей), и не может быть обработано таким образом
.Следующее работает для меня в Debian Stretch с OpenSSH 7.4p1:
Поместите каждый сертификат в отдельный файл, например:
~/.ssh/id_ed25519-cert-ca1.pub
~/.ssh/id_ed25519-cert-ca2.pub
Затем перечислите файлы сертификатов в ~/.ssh/config:
CertificateFile ~/.ssh/id_ed25519-cert-ca1.pub
CertificateFile ~/.ssh/id_ed25519-cert-ca2.pub
Теперь команда ssh должна попробовать выбрать нужный сертификат автоматически.
От man ssh_config:
В конфигурационных файлах можно указать несколько файлов сертификатов; эти сертификаты будут проверяться последовательно. Несколько директив CertificateFile добавят к списку сертификаты, используемые для аутентификации.