Açıkça izin verilmeyen SSH anahtarlarını kaldırmak için Kukla kullanma


12

SSH anahtarlarını dağıtmak için kukla kullanıyorum, şöyle:

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

~ / .Ssh / yetkili_anahtarlar dosyası, istenen sonuç olan birden fazla sınıftan bir anahtar karışımı içerir. Ancak, $ HOME / .ssh / yetkili_anahtarlarına manuel olarak bir anahtar eklenirse, Kukla bunu yerinde bırakacaktır. Manifest'te açıkça tanımlanmamış herhangi bir anahtarı her zaman kaldırmanın bir yolu var mı?

Kukla sürüm 2.7.1 var.


Tüm yetkili_anahtarlarımın bir kopyasını merkezi bir konuma almak için dışa aktarılan kaynakları kullanmayı düşünüyordum. Sonra alışılmadık anahtarları bulmak için komut dosyaları çalıştırabilir ve bunları kuklaya ekleyebilir veya kaldırmak için bir kaynak ekleyebilirim.
Zoredache

Yanıtlar:



13

ssh_authorized_keyKaynakları kullanmak yerine, authorized_keystek bir kullanıcı için tüm SSH anahtarlarının listesini alan bir kaynak tanımlamaya karar verdim . Tanım şuna benzer:

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_keysparametresi, gerekli tüm anahtarları bir liste olarak alır. authorized_keys.erbŞablon şöyle görünür:

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

kullanım

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

Puppet +>operatörü sayesinde SSH anahtarlarını koşullu olarak eklemek (örneğin farklı sınıflarda) da kolaydır :

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

Bu yöntemle, kullanıcı asla Kukla yapılandırmasında açıkça belirtilmeyen anahtarlara sahip olmaz. Anahtar dizesi, yetkili_anahtarlarda olduğu gibi kullanılır, bu nedenle seçenekler ve kısıtlamalar eklemek çok önemlidir.

Başkaları bu yöntemi başarılı bir şekilde kullandıklarını duymaktan mutluluk duyarım!


3

Bunu, kaynak metatipini kullanarak yapabilmeniz gerekir . ÖRNEĞİN

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

Ayar noop => true,, çıkarma işleminin gerçekleşmesini önler. Bunun yerine, kukla neyin kaldırılacağını bildirir. İstediğiniz buysa, noop ifadesini kaldırın .

Yönetilmeyen kaynaklarda işlem gerçekleştirmek için ideal sözdizimi tartışılmaktadır .

EDIT: Yorumlarda belirtildiği gibi, bu cevap işe yaramıyor.


Bu ses tam aradığım gibi. Bu satırı eklediğimde, kukla bu hatayı üretir: puppet-agent[9895]: (/Stage[main]//Resources[ssh_authorized_key]) Failed to generate additional resources using 'generate': Attribute 'user' or 'target' is mandatory. Bir kullanıcı eklemeyi denedim ve sonra diyor Could not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter user . Herhangi bir fikir?
Dylan Tack

Emin değilim. Muhtemelen groups.google.com/group/puppet-users
sciurus

1
Bunun neden kabul edilen cevap olduğu konusunda net değilim: Kukla Laboratuvarlarına göre, bu işe yaramıyor ve işe yaramadı: projects.puppetlabs.com/issues/1917 . OP, senin için işe yaradı mı?
Bill Weiss

1
Hayır, ben denemedim, sadece diğer kaynaklar (örneğin ana bilgisayarlar, nagios türleri) için yaptığı gibi davranması bekleniyor. Haklı görünüyorsun ve henüz ssh tuşları için çalışmıyor- projeler.puppetlabs.com/issues/1581
sciurus

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.