У меня есть несколько клиентских компьютеров (например, ноутбуки, настольные компьютеры и т. Д.), И я подключаюсь к нескольким серверных машинам, которыми я управляю, и я вхожу в них через SSH. Я могу представить себе несколько схем управления ключами ssh, которые имели бы смысл, и мне любопытно, что делают другие.
Я бы сгенерировал одну пару открытого/закрытого ключа и поместил закрытый ключ на каждую клиентскую машину, а открытый ключ на каждую серверную машину.
Я бы сгенерировал одну пару ключей на каждой серверной машине и поместил бы каждый закрытый ключ на свои клиентские компьютеры.
Каждая клиентская машина будет иметь уникальный закрытый ключ,и каждая серверная машина будет иметь открытые ключи для каждой клиентской машины, с которой я хотел бы подключиться.
Полностью за бортом?
Какой из них лучше? Есть ли другие варианты? Какие критерии вы используете для оценки правильной конфигурации?
Я использую Опцию 3: Одна пара ключей на клиентскую машину и это имеет большую часть смысла мне. Вот некоторые причины:
Опция 4 хороша, но является просто слишком большой работой. Опция 3 получает Вас 98% там с намного меньшим количеством стычки.
Я устранил бы обе Ваших опции 1 s (в которых я подозреваю, что каждый, как предполагалось, был опцией 2 ;-) потому что закрытые ключи являются уязвимыми данными, и имеет смысл удерживать их как можно меньше мест. Я лично никогда не копировал бы закрытый ключ от одного компьютера до другого (или даже от одного файла до другого на том же компьютере), кроме, возможно, для того, чтобы сделать резервные копии. Хотя в отличие от большинства ключей шифрования, если ключ SSH теряется, это не конец света (просто создают новый, Вы не теряете данных).
Опция 3 и использование что-то как Марионетка для обработки управления ключами.
Я использую решение, которое немного более сложно, но очень универсально, поскольку я хочу поддержать некоторое разделение в ключах идентификационных данных SSH, используемых для моих серверов домашней сети, офисных серверов, консультируясь с серверами клиентской сети и другими различными системами, на которых у меня есть учетные записи.
Теперь, когда сказанный я работаю от рабочих станций Linux почти исключительно, таким образом, у меня есть флеш-карта, которая является установкой с помощью шифрования 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 как символьную ссылку на путь к каталогу на зашифрованной Карте памяти, когда это правильно смонтировано.
%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 использовались.
Обновление: Теперь я на самом деле использую gpg-агент GnuPG с совместимостью ssh-агента, чтобы просто считать и использовать аутентификационный ключ от моей смарт-карты OpenPGP v2.