Назад | Перейти на главную страницу

Лучшая система для управления ключами ssh?

У меня есть несколько клиентских компьютеров (например, ноутбуки, настольные компьютеры и т. Д.), Я подключаюсь к нескольким серверным машинам, которыми управляю, и вхожу на них все через SSH. Я могу представить несколько разумных схем управления ssh-ключами, и мне любопытно, что делают другие.

Вариант 1. Одна глобальная пара открытого и закрытого ключей.

Я бы сгенерировал одну пару открытого / закрытого ключей и поместил закрытый ключ на каждую клиентскую машину, а открытый ключ - на каждую серверную машину.

Вариант 2: одна пара ключей на сервер.

Я бы сгенерировал одну пару ключей на каждой серверной машине и поместил каждый закрытый ключ на свои клиентские машины.

Вариант 3: одна пара ключей на клиентский компьютер.

Каждая клиентская машина будет иметь уникальный закрытый ключ, а каждая серверная машина будет иметь открытые ключи для каждой клиентской машины, с которой я хотел бы подключиться.

Вариант 4: одна пара ключей на пару клиент / сервер

Совершенно за борт?

Что из этого лучше? Есть ли другие варианты? Какие критерии вы используете для оценки правильной конфигурации?

я использую Вариант 3. Одна пара ключей на клиентский компьютер и для меня это имеет смысл. Вот некоторые из причин:

  • Если клиент скомпрометирован, этот ключ (и только этот ключ) необходимо удалить с серверов.
  • Он достаточно гибкий, чтобы решать, к чему я могу получить доступ и откуда, без предоставления общего доступа ко всем серверам со всех клиентов.
  • Очень удобно. Для ssh-add есть только 1 ключ, без путаницы.
  • Легко настроить и управлять Вариант 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 каталог, который я создал ключи.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

Вы даже можете использовать выражение для поиска ключа, специфичного для имени пользователя удаленного сервера или %час для имени хоста удаленного сервера, как и % u и % l были использованы.

Обновление: теперь я фактически использую GnuPG gpg-agent с совместимостью с ssh-agent, чтобы просто читать и использовать ключ аутентификации на моей смарт-карте OpenPGP v2.

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

Вариант 3 и используйте что-то вроде Puppet для управления ключами.

Вариант 3.

Это также позволяет вам контролировать, к каким серверам клиент может получить доступ. например если клиенту X нужен доступ к серверам A и B, но C или D, вы копируете его открытый ключ только на эти хосты.