12 votos

El uso de Puppet para eliminar las claves SSH no explícitamente permitido

Estoy usando títeres para distribuir las claves SSH, así:

ssh_authorized_key { "alice@foo.com":
   ensure => present,
   key => 'xxxx',
   type => 'ssh-rsa',
   user => 'deploy',
}

El ~/.ssh/authorized_keys termina con una mezcla de claves de varias clases, que es el resultado deseado. Sin embargo, si una clave es agregar manualmente a $HOME/.ssh/authorized_keys, espectáculos de Puppet, va a dejar en su lugar. Hay una manera para siempre eliminar cualquier tecla que no se ha definido explícitamente en un manifiesto?

He de títeres versión 2.7.1.

13voto

Dunny87 Puntos 1

En lugar de utilizar ssh_authorized_key de los recursos, me decidí a definir un authorized_keys de los recursos, que toma una lista de todas las claves SSH para un único usuario. El definir este aspecto:

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 parámetro toma todas las claves necesarias como una lista. El authorized_keys.erb de la plantilla tiene este aspecto:

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

El uso de

user {'mikko':
    ...
}
authorized_keys {'mikko':
    sshkeys => [
        'ssh-rsa XXXXXXYYYYYYYYYZZZZZZZZZ mikko@domain.tld',
        'ssh-rsa XXXXXXZZZZZZZZZHHHHHHHHH mikko@other-host.tld',
    ],
}

La adición de claves SSH de forma condicional (por ejemplo, en las diferentes clases), es también fácil, gracias a la Marioneta del +> operador:

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

Con este método, el usuario no tiene claves que no están explícitamente especificado en el Puppet de configuración. La clave de la cadena se utiliza en authorized_keys tal como es, así que la adición de opciones y restricciones es trivial.

Yo sería feliz de saber si otras personas han utilizado este método con éxito!

4voto

Kasper Holdum Puntos 4173

Comenzando con Puppet 3.6 ahora es posible purgar no administrado claves SSH autorizadas a través de la user tipo. Por ejemplo,

user { 'nick':
  ensure         => present,
  purge_ssh_keys => true,
}

3voto

Kasper Holdum Puntos 4173

Usted debe ser capaz de hacer esto, utilizando los recursos metatype. E. G.

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

Configuración de noop => true, impide la eliminación de tomar su lugar. En su lugar, la marioneta se informe de lo que sería eliminado. Si es que lo desea, retire el noop declaración.

La sintaxis ideal para la realización de operaciones sobre los recursos no administrados que está en discusión.

EDIT: Como se ha mencionado en los comentarios, esta respuesta no funciona.

1voto

Rodney Puntos 11

En Puppet de Forjar un módulo ha sido publicado bajo la Licencia Apache, Versión 2.0 que ofrece esta capacidad.

Se basa en la Marioneta concat en lugar de las plantillas, aunque.

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

En lugar de pasar una matriz de teclas como un parámetro que definir entradas independientes para cada clave.

Enfoque diferente de Mikko, pero con el mismo resultado neto.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: