Лучшая система для управления ключами SSH?
У меня есть несколько клиентских компьютеров (например, ноутбуки, настольные компьютеры и т. Д.), И я подключаюсь к нескольким серверным компьютерам, которыми управляю, и подключаюсь к ним всем через SSH. Я могу представить несколько схем управления ключами SSH, которые имеют смысл, и мне любопытно, что делают другие.
Вариант 1: одна глобальная пара открытых / закрытых ключей.
Я бы сгенерировал одну пару открытых / закрытых ключей и поместил закрытый ключ на каждую клиентскую машину и открытый ключ на каждую серверную машину.
Вариант 2: одна пара ключей на сервер.
Я бы сгенерировал одну пару ключей на каждом сервере и поместил каждый закрытый ключ на свои клиентские машины.
Вариант 3: одна пара ключей на клиентский компьютер.
У каждого клиентского компьютера будет уникальный закрытый ключ, и у каждого серверного компьютера будут открытые ключи для каждого клиентского компьютера, с которого я хотел бы подключиться.
Вариант 4: одна пара ключей на пару клиент / сервер
Полностью за бортом?
Какой из них лучше? Есть ли другие варианты? Какие критерии вы используете для оценки правильной конфигурации?
5 ответов
Я использую вариант 3: одна пара ключей на клиентскую машину, и это имеет для меня наибольшее значение. Вот некоторые из причин:
- Если клиент скомпрометирован, то этот ключ (и только этот ключ) необходимо удалить с серверов.
- Он достаточно гибок, чтобы решить, к чему я могу получить доступ откуда угодно, не предоставляя общий доступ ко всем серверам от всех клиентов.
- Очень удобно. Там только 1 ключ для ssh-add, нет путаницы.
- Простота установки и администрирования через Вариант 4
Вариант 4 хорош, но просто слишком много работы. Вариант 3 дает вам 98% с гораздо меньшими хлопотами.
Я использую решение, которое немного сложнее, но очень универсально, так как я хочу сохранить некоторое разделение ключей идентификации SSH, используемых для серверов моей домашней сети, офисных серверов, серверов клиентских сетей и других различных систем, на которых у меня есть учетные записи.
Теперь это говорит о том, что я работаю с рабочих станций Linux почти исключительно, поэтому у меня есть USB-ключ, который настроен с использованием шифрования LUKS, и мой оконный менеджер X11 вместе с демоном HAL обнаруживают зашифрованный диск LUKS и запрашивают пароль для расшифровки, когда он вставляется и пытается быть установленным Храня это на зашифрованном диске, как я делаю, я никогда не храню свои ключи SSH на любой рабочей станции.
Затем у меня есть следующая конфигурация в моем ~/.ssh/config
файл:
Host *
Protocol 2
IdentityFile %d/.ssh/keys.d/id_rsa.%l
IdentityFile %d/.ssh/keys.d/id_dsa.%l
IdentityFile %d/.ssh/keys.d/%u@%l
% D переводится в OpenSSH как домашний каталог пользователя, а в каталоге ~/.ssh я создал keys.d как символическую ссылку на путь к каталогу на зашифрованном USB-диске, когда он правильно смонтирован.
Выражение %l преобразуется в имя хоста локальных клиентских машин, а %u будет преобразовано в имя пользователя локального клиента.
Эта конфигурация позволяет SSH искать ключ, используя 3 различных выражения. Например, если имя пользователя моего локального клиента было jdoe
и имя моего локального клиента examplehost
он будет выглядеть в следующем порядке, пока не найдет ключ, который существует и принят удаленным сервером.
/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost
Вы даже можете использовать выражение %r для поиска ключа, определенного для имени пользователя удаленного сервера, или %h для имени хоста удаленного сервера, точно так же, как были использованы %u и %l.
Обновление: теперь я фактически использую gn-agent GnuPG с совместимостью с ssh-agent, чтобы просто читать и использовать ключ аутентификации с моей смарт-карты OpenPGP v2.
Я бы исключил оба варианта 1 (из которых я подозреваю, что один должен быть вариантом 2;-), потому что закрытые ключи являются конфиденциальными данными, и имеет смысл хранить их в как можно меньшем количестве мест). Лично я никогда не копировал бы закрытый ключ с одного компьютера на другой (или даже из одного файла в другой на том же компьютере), за исключением, может быть, резервного копирования. Хотя в отличие от большинства ключей шифрования, если ключ SSH теряется, это не конец света (просто создайте новый, вы не потеряете данные).
Вариант 3 и использовать что-то вроде Puppet для управления ключами.
Вариант 3
Это также позволяет вам контролировать, к каким серверам клиент может получить доступ. например, если клиент X нуждается в доступе к серверам A и B, но C или D, вы копируете его открытый ключ только на эти хосты.