Использование Puppet для удаления ключей SSH не разрешено явно

Я использую марионетку для распространения ключей SSH, например:

ssh_authorized_key { "[email protected]":
   ensure => present,
   key => 'xxxx',
   type => 'ssh-rsa',
   user => 'deploy',
}

Файл ~ /.ssh /authorized_keys заканчивается тем, что содержит сочетание ключей из нескольких классов, что является желаемым результатом. Однако, если ключ добавлен вручную в $ HOME /.ssh /authorized_keys, Puppet оставит его на месте. Есть ли способ всегда удалить любой ключ, который не был явно определен в манифесте?

У меня есть марионеточная версия 2.7.1.

12 голосов | спросил Dylan Tack 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 27 Sep 2011 22:12:56 +0400 2011, 22:12:56

4 ответа


4

Начиная с Puppet 3.6 теперь можно очистить неуправляемые авторизованные ключи SSH с помощью типа user. Например,

user { 'nick':
  ensure         => present,
  purge_ssh_keys => true,
}
ответил sciurus 26 Maypm14 2014, 21:15:39
13

Вместо использования ресурсов ssh_authorized_key я решил определить authorized_keys, который принимает список всех ключей SSH для одного пользователя. Определение выглядит следующим образом:

define authorized_keys ($sshkeys, $ensure = "present", $home = '') {
    # This line allows default homedir based on $title variable.
    # If $home is empty, the default is used.
    $homedir = $home ? {'' => "/home/${title}", default => $home}
    file {
        "${homedir}/.ssh":
            ensure  => "directory",
            owner   => $title,
            group   => $title,
            mode    => 700,
            require => User[$title];
        "${homedir}/.ssh/authorized_keys":
            ensure  => $ensure,
            owner   => $ensure ? {'present' => $title, default => undef },
            group   => $ensure ? {'present' => $title, default => undef },
            mode    => 600,
            require => File["${homedir}/.ssh"],
            content => template("authorized_keys.erb");
    }
}

$ssh_keys принимает все необходимые ключи в качестве списка. Шаблон authorized_keys.erb выглядит следующим образом:

# NOTICE: This file is autogenerated by Puppet and should not be modified
<% sshkeys.each do |key| -%>
<%= key %>
<% end -%>

Использование

user {'mikko':
    ...
}
authorized_keys {'mikko':
    sshkeys => [
        'ssh-rsa XXXXXXYYYYYYYYYZZZZZZZZZ [email protected]',
        'ssh-rsa XXXXXXZZZZZZZZZHHHHHHHHH [email protected]',
    ],
}

Добавление ключей SSH условно (например, в разных классах) также легко, благодаря оператору Puppet +>:

Authorized_keys <| title == 'mikko' |> {
    sshkeys +> 'ssh-rsa ASDFASDFASDFASDF [email protected]'
}

С помощью этого метода у пользователя никогда не будет ключей, которые явно не указаны в конфигурации Puppet. Строка ключа используется в authorized_keys так же, как и есть, поэтому добавление опций и ограничений тривиально.

Я был бы рад узнать, успешно ли использовали этот метод!

ответил Mikko 28 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 28 Sep 2011 12:33:04 +0400 2011, 12:33:04
3

Вы должны сделать это, используя метатег resources . Например.

resources { 'ssh_authorized_key': noop => true, purge => true, }

Настройка noop => true, предотвращает удаление. Вместо этого марионетка сообщит, что будет удалено. Если это то, что вы хотите, удалите оператор noop .

Идеальный синтаксис для выполнения операций над неуправляемыми ресурсами - это обсуждение .

EDIT: Как уже упоминалось в комментариях, этот ответ не работает.

ответил sciurus 27 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowTue, 27 Sep 2011 23:22:02 +0400 2011, 23:22:02
1

В Puppet Forge модуль опубликован под лицензией Apache версии 2.0, которая предлагает эту возможность.

Он полагается только на кукольный concat вместо шаблонов.

https://github.com/nightfly19/puppet-ssh_keys/tree /ведущий /манифестов

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

Разный подход от Микко, но тот же чистый результат.

ответил Rodney 24 FebruaryEurope/MoscowbMon, 24 Feb 2014 23:15:24 +0400000000pmMon, 24 Feb 2014 23:15:24 +040014 2014, 23:15:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132