Wie kann ich Puppet SSH-Schlüssel für virtuelle Benutzer bereitstellen lassen?

8

Ich versuche, Puppet dazu zu bringen, autorisierte SSH-Schlüssel für virtuelle Benutzer zuzuweisen, erhalte jedoch weiterhin den folgenden Fehler:

err: Could not retrieve catalog: Could not parse for environment production: Syntax error at 'user'; expected '}' at /etc/puppet/modules/users/manifests/ssh_authorized_keys.pp:9

Ich glaube, meine Konfiguration ist korrekt (siehe unten), aber gibt es einen Syntaxfehler oder ein Scoping-Problem, das mir fehlt? Ich möchte einfach Benutzer Knoten zuweisen und diese Benutzer ihre SSH-Schlüssel automatisch installieren lassen. Gibt es vielleicht einen besseren Weg, dies zu tun, und ich überdenke es nur?

# /etc/puppet/modules/users/virtual.pp

class user::virtual {
  @user { "user":
    home => "/home/user",
        ensure => "present",
        groups => ["root","wheel"],
        uid => "8001",
        password => "SCRAMBLED",
        comment => "User",
        shell => "/bin/bash",
    managehome => "true",
  }

# /etc/puppet/modules/users/manifests/ssh_authorized_keys.pp

ssh_authorized_key { "user":
  ensure => "present",
  type => "ssh-dss",
  key => "AAAAB....",
  user => "user",
}


# /etc/puppet/modules/users/init.pp

import "users.pp"
import "ssh_authorized_keys.pp"

class user::ops inherits user::virtual {
        realize(
                User["user"],
        )
}

# /etc/puppet/manifests/modules.pp

import "sudo"
import "users"

# /etc/puppet/manifests/nodes.pp

node basenode {
  include sudo
}

node 'testbox' inherits basenode {
  include user::ops 
}

# /etc/puppet/manifests/site.pp

import "modules"
import "nodes"

# The filebucket option allows for file backups to the server
filebucket { main: server => 'puppet' }

# Set global defaults - including backing up all files to the main filebucket and adds a global path
File { backup => main }
Exec { path => "/usr/bin:/usr/sbin/:/bin:/sbin" }
Pheezy
quelle

Antworten:

15

Sie vermissen eine schließende Klammer am Ende von virtual.pp.

womble
quelle
7

Hier ist ein Puppenmodul, das ich vor einem Jahr geschrieben habe, um Benutzer für einen früheren Arbeitgeber zu verwalten.

jtimberman
quelle
Das sieht so kompliziert aus ...
SamK
3
Es war das Einfachste, was ich mir ausgedacht habe. Überall, wo ich um Hilfe oder andere Ansätze bat, wurde mir gesagt, "LDAP verwenden", was für nur 10 Benutzer keine Antwort war, da wir LDAP nirgendwo anders verwendeten und 3 physische Standorte unterstützen mussten.
Jtimberman
3

Ja, es gibt einen besseren Weg, genau dafür sind Definitionen gedacht. Sie würden eine Definition mit dem Namen "ssh_user" erstellen, virtuelle Benutzer dieses Typs erstellen und diese dann realisieren. Joshs Code verwendet eine Definition, von der ich spreche, aber Sie würden auch die ssh_authorized_key in die Definition einfügen, die mit Variablen aus der Definition parametrisiert ist.


quelle
2

Ich empfehle dringend, die Hervorhebung der Puppet-Syntax zu verwenden, um solche Dinge zu vermeiden.

http://www.vim.org/scripts/script.php?script_id=2094

Cawflands
quelle
1
Schauen Sie sich auch Geppetto an , ein nützliches Toolset zur Entwicklung von Puppet-Modulen und Manifesten. Es würde einen solchen Fehler signalisieren.
Martijn Heemels
2
Es basiert auf Eclipse. Ich würde das nicht "nett" nennen: p
ThiefMaster