Управление ключами SSH в больших и смешанных средах (Linux)

Управление ключами SSH в больших и смешанных средах (Linux)

В каждой компании, где я работал, всегда было больно управлять ключами ssh. У нас были разные способы управления ими. Но в основном это были какие-то CM-системы типа puppet/chef/ansible или просто ручное копирование ключей или даже какие-то уродливые скрипты bash :D

Также слышал, что некоторые люди используют LDAP или любую базу данных в качестве хранилища ключей ssh. Но все равно нужна дополнительная автоматизация, например, какой-нибудь инструмент CM для помещения/удаления ключа на сервере.

Так вот вопрос, есть ли какой-то хороший и современный способ сделать это, о котором я не знаю? Как крупные IT-компании (типа Google или Facebook и т. д.) обрабатывают ключи?

решение1

(Мета: на мой взгляд, этот вопрос не основан на мнении.)

Если вы используете довольно современные версии Linux/Unix с довольно новым OpenSSH, вы можете использовать сертификаты OpenSSH. Если вы хотите получить что-то вроде "билетного" ощущения с MFA, вы можете выпустить временные сертификаты OpenSSH.

Суть сертификатов OpenSSH в том, что единственное, что необходимо установить на стороне sshd, — это открытый ключ SSH-CA, на который ссылается директиваTrustedUserCAKeys в sshd_config.

С директивамиУполномоченные директора*Вы также можете принять набор основных имен (по сути, имен пользователей) в сертификатах OpenSSH для другой локальной учетной записи пользователя.

Сертификаты OpenSSH не являются сертификатами X.509, они имеют другой формат, указанный в документе исходного дерева.ПРОТОКОЛ.certkeys.

Вы найдете несколько веб-страниц с инструкциями по использованиюssh-keygenподписывать открытые ключи с помощью SSH-CA (например,Использование SSH-сертификатов).

Я реализовал такой небольшой SSH-CA для клиента, работающий как веб-сервис для выдачи временных сертификатов пользователей на основе многофакторной аутентификации (LDAP и OTP).

Вы найдете несколько реализаций с открытым исходным кодом в обычных местах. Я намеренно не привожу здесь список, поскольку после просмотра нескольких из них я реализовал свою собственную и поэтому не хочу рекомендовать какую-то определенную реализацию. Это не значит, что эти реализации не работают. Они просто не соответствовали моим конкретным требованиям заказчика.

Предостережение:

В настоящее время он работает только сOpenSSHилиlibsshна стороне клиента.замазкапока не поддерживает. Также нет поддержки в сетевых устройствах и других специальных устройствах.

PS: Я бы все же рекомендовал использовать хорошее управление пользователями на основе LDAP, которое даст вам больше, чем нужно.

Связанный контент