Ich benutze Puppet, um SSH-Schlüssel zu verteilen:
ssh_authorized_key { "[email protected]":
ensure => present,
key => 'xxxx',
type => 'ssh-rsa',
user => 'deploy',
}
Die Datei ~ / .ssh / authorized_keys enthält schließlich eine Mischung von Schlüsseln aus mehreren Klassen. Dies ist das gewünschte Ergebnis. Wenn jedoch ein Schlüssel manuell zu $ HOME / .ssh / authorized_keys hinzugefügt wird, belässt Puppet ihn an Ort und Stelle. Gibt es eine Möglichkeit, Schlüssel, die nicht explizit in einem Manifest definiert wurden, immer zu entfernen?
Ich habe Puppet Version 2.7.1.
Antworten:
Ab Puppet 3.6 ist es nun möglich, nicht verwaltete SSH-autorisierte Schlüssel über den
user
Typ zu löschen . Beispielsweise,quelle
Anstatt
ssh_authorized_key
Ressourcen zu verwenden, habe ich beschlossen, eineauthorized_keys
Ressource zu definieren , die eine Liste aller SSH-Schlüssel für einen einzelnen Benutzer enthält. Das Define sieht so aus:$ssh_keys
Parameter nimmt alle notwendigen Schlüssel als Liste. Dieauthorized_keys.erb
Vorlage sieht folgendermaßen aus:Verwendung
Das bedingte Hinzufügen von SSH-Schlüsseln (zum Beispiel in verschiedenen Klassen) ist dank des Puppet-
+>
Operators ebenfalls einfach :Mit dieser Methode hat der Benutzer niemals Schlüssel, die in der Puppet-Konfiguration nicht explizit angegeben sind. Die Schlüsselzeichenfolge wird unverändert in authorized_keys verwendet, sodass das Hinzufügen von Optionen und Einschränkungen trivial ist.
Ich würde mich freuen zu hören, wenn andere diese Methode erfolgreich angewendet haben!
quelle
Sie sollten in der Lage sein, dies unter Verwendung des Ressourcen- Metatyps zu tun . Z.B
Die Einstellung
noop => true,
verhindert das Entfernen. Stattdessen meldet Marionette, was entfernt werden würde. Wenn es das ist, was Sie wollen, entfernen Sie die noop- Anweisung.Die ideale Syntax für die Ausführung von Vorgängen mit nicht verwalteten Ressourcen wird derzeit diskutiert .
EDIT: Wie in den Kommentaren erwähnt, funktioniert diese Antwort nicht.
quelle
puppet-agent[9895]: (/Stage[main]//Resources[ssh_authorized_key]) Failed to generate additional resources using 'generate': Attribute 'user' or 'target' is mandatory.
Ich habe versucht, einen Benutzer hinzuzufügen, und dann heißt esCould not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter user
. Irgendwelche Ideen?Auf Puppet Forge wurde ein Modul unter der Apache-Lizenz, Version 2.0, veröffentlicht, das diese Fähigkeit bietet.
Es basiert jedoch auf Puppet concat anstelle von Vorlagen.
https://github.com/nightfly19/puppet-ssh_keys/tree/master/manifests
Anstatt ein Array von Schlüsseln als Parameter zu übergeben, definieren Sie separate Einträge für jeden Schlüssel.
Anderer Ansatz als bei Mikko, aber gleiches Nettoergebnis.
quelle