Я хочу реализовать подписанные сертификаты для аутентификации SSH. Я выполнил шаги Вот и сейчас пытаюсь понять, как я собираюсь реализовать это в своих системах.
Например, у нас есть две среды: производственная и тестовая; каждый со своим собственным «пользовательским ключом» для подписи других ключей. Я хочу иметь возможность контролировать, кто может получить доступ к каждой среде, но неудобство, с которым я сталкиваюсь, позволяет одному пользователю получить доступ к обеим средам с одним и тем же закрытым ключом.
На странице руководства ssh в разделе -i identity_file:
ssh также попытается загрузить информацию о сертификате из имени файла, полученного путем добавления -cert.pub к именам файлов идентификаторов.
Похоже, это подразумевает, что мне нужно было бы иметь несколько копий закрытого ключа (только что названного по-другому) и соответствующим образом назвать файл сертификата в дополнение к добавлению записи файла .ssh / config, чтобы он использовал правильный сертификат.
Насколько я понимаю, если вы укажете несколько записей IdentityFile в .ssh / config, ssh попробует каждую из них. Однако, похоже, нет возможности (по крайней мере, я не могу найти в документации) указать сертификат.
Есть ли способ указать файл сертификата (отличный от предполагаемого -cert.pub) в .ssh / config или файл, содержащий список сертификатов для проверки?
Следующее работает для меня на 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 должна автоматически попытаться выбрать правильный сертификат.
От человека ssh_config:
В файлах конфигурации можно указать несколько файлов сертификатов; эти сертификаты будут проверяться последовательно. Несколько директив CertificateFile добавят в список сертификатов, используемых для аутентификации.
Я не знаю хорошо способ сделать это, но я знаю два способа.
Кажется, что 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 указывает, что ключ действительно идентифицирует пользователя И что пользователю должно быть разрешено войти в систему.
Ключи хоста и ключи пользователя на самом деле не являются двойными, поскольку инициирование рукопожатия с сервером несравнимо с входом в систему (даже с ограничениями ваших возможностей) и не может рассматриваться таким образом.