Используя Марионетку для удаления ключей SSH, не явно позволенных

Если Ваш поиск исторической ссылки, можно попробовать сторонний инструмент как Вход в систему, Центральный от, Мотивируют Системы. Это записывает все входы в систему Пользователя Active Directory и обеспечивает веб-интерфейс для анализа данных. Это также включает некоторые довольно хорошие графики, которые переводят статистику входа в систему в использование процента.

12
задан 28 September 2011 в 20:00
4 ответа

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

user { 'nick':
  ensure         => present,
  purge_ssh_keys => true,
}
4
ответ дан 2 December 2019 в 21:33

Вместо использования ресурсов 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 mikko@domain.tld',
        'ssh-rsa XXXXXXZZZZZZZZZHHHHHHHHH mikko@other-host.tld',
    ],
}

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

Authorized_keys <| title == 'mikko' |> {
    sshkeys +> 'ssh-rsa ASDFASDFASDFASDF mikko@somewhere-else.tld'
}

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

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

13
ответ дан 2 December 2019 в 21:33

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

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

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

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

РЕДАКТИРОВАТЬ: Как упоминалось в комментариях , этот ответ не работает.

3
ответ дан 2 December 2019 в 21:33

On Puppet Forge a module has been published under the Apache License, Version 2.0 that offers this ability.

It relies on Puppet concat instead of templates though.

https://github.com/nightfly19/puppet-ssh_keys/tree/master/manifests

Instead of passing an array of keys as a parameter you define separate entries for each key.

Different approach from Mikko's, but same net result.

1
ответ дан 2 December 2019 в 21:33

Теги

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