Управление ключами SSH в больших и смешанных средах (Linux)
В каждой компании, в которой я работал, всегда было больно в задницу управлять ssh-ключами. У нас были разные способы управления ими. Но в основном это были некоторые системы CM, такие как puppet/chef/ansible или просто ручное копирование ключей или даже некрасивые скрипты bash:D
Также слышал, что некоторые люди используют LDAP или любую БД в качестве хранилища ключей ssh. Но все же вам нужна дополнительная автоматизация, например, инструмент CM для установки / удаления ключа на сервере.
Итак, вопрос в том, есть ли какой-то хороший и современный способ сделать это, чего я не знаю? Насколько крупные ИТ-компании (например, Google, Facebook и т. Д.) Работают с ключами?
1 ответ
(Мета: ИМО, этот вопрос не основывается на мнении.)
Если вы используете довольно современные версии Linux/Unix с довольно свежим OpenSSH, вы можете использовать сертификаты OpenSSH. Если вы хотите, чтобы у MFA было ощущение "билета", вы можете выдать временные сертификаты OpenSSH.
Суть сертификатов OpenSSH заключается в том, что единственной вещью, которую необходимо установить на стороне sshd, является открытый ключ SSH-CA, на который ссылается директива TrustedUserCAKeys в sshd_config.
С помощью директив AuthorizedPrincipals* вы также можете принять набор имен участников (в основном имен пользователей) в сертификатах OpenSSH для другой учетной записи локального пользователя.
Сертификаты OpenSSH не являются сертификатами X.509, они имеют другой формат, указанный в документе исходного дерева PROTOCOL.certkeys.
Вы найдете несколько веб-страниц о том, как использовать ssh-keygen для подписи открытых ключей с помощью SSH-CA (например, Использование сертификатов SSH).
Я реализовал такой небольшой SSH-CA для клиента, работающего в качестве веб-службы, для выдачи временных пользовательских сертификатов на основе многофакторной аутентификации (LDAP и OTP).
Вы найдете несколько реализаций с открытым исходным кодом в обычных местах. Я сознательно не даю здесь список, потому что после просмотра нескольких из них я реализовал свой собственный и, следовательно, не хочу одобрять конкретную реализацию. Это не означает, что эти реализации не работают. Они просто не отвечали моим конкретным требованиям клиентов.
Предостережение:
В настоящее время он работает только с OpenSSH или libssh на стороне клиента. Шпатлевка пока не поддерживает это. Также нет поддержки сетевых устройств и других специальных устройств.
PS: Тем не менее, я бы рекомендовал использовать приличное управление пользователями на основе LDAP, которое даст вам больше, что вам нужно.