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

Как я могу использовать Puppet для поддержки ключей хоста SSH при восстановлении системы?

У меня есть несколько лабораторных сред, в которых компьютеры периодически перестраиваются, но мне нужно сохранять одни и те же ключи хоста ssh, чтобы люди, которые подключаются к лабораторным компьютерам (часто из своих собственных систем, не находящихся под моим управлением), не получали " host key changed "ошибки каждый раз, когда мы обновляем операционные системы лабораторных систем.

(Это похоже на вопрос Самый плавный рабочий процесс для обработки ошибок проверки хоста SSH? но в данном случае мы уже решили, что сохранение одних и тех же ключей при перестроении системы - лучшее решение для нас.)

Прямо сейчас у меня есть модуль Puppet с именем ssh в котором есть следующий пункт:

file { "/etc/ssh/":
  owner   => 'root',
  group   => 'root',
  mode    => '0644',
  source  => "puppet:///modules/ssh/$fqdn",
  recurse => true,
  require => Package['openssh-server'],
  notify  => Service['sshd'],
}

На мастере марионетки каждый хост имеет свой собственный каталог, содержащий все файлы ключей хоста (ssh_host_key, ssh_host_dsa_key, ssh_host_rsa_keyи т. д.), как следует из file определение ресурса. Моя проблема в том, что это похоже на смешивание кода и данных (поскольку все ключи хоста находятся внутри каталога модуля), и мне приходится делать еще одну фиксацию в Puppet VCS каждый раз, когда я добавляю новый набор хостов. Есть ли лучший способ управлять этими вещами?

Моя проблема в том, что это похоже на смешивание кода и данных (поскольку все ключи хоста находятся внутри каталога модуля), и мне приходится делать еще одну фиксацию в Puppet VCS каждый раз, когда я добавляю новый набор хостов. Есть ли лучший способ управлять этими вещами?

Вы можете настроить свой fileserver.conf и в основном делитесь другим каталогом, который вы используете только для конфигурации ssh, если вы хотите отделить файлы марионеток от конфигурации / ключей SSH.

fileserver.conf
[sshconfig]
  path /srv/puppet/sshconfig/
  allow *

С конфигурацией, подобной приведенной выше, ваш манифест может выглядеть, как показано ниже, и файлы будут извлекаться из /srv/puppet/sshconfig/$fqdn/.

file { "/etc/ssh/":
  source  => "puppet:///sshconfig/$fqdn",
  ...
}

Я предлагаю вам создать module или script куда вы загружаете свой хостинг в external сервер, то вы даете sort -u в этом файле, исключая любую повторяющуюся запись, затем после этого вы загружаете этот файл на все свои машины, конечно, заботясь о новых записях в этом ssh_known_hosts слишком.