Skip to content

Instantly share code, notes, and snippets.

@mbadley
Created August 25, 2017 13:51
Show Gist options
  • Select an option

  • Save mbadley/715b1cbe931975f6eb58dc431da2be45 to your computer and use it in GitHub Desktop.

Select an option

Save mbadley/715b1cbe931975f6eb58dc431da2be45 to your computer and use it in GitHub Desktop.
puppet getting started master, client & a module
#puppet master
apt-get update && sudo apt-get -y install ntp
wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
dpkg -i puppetlabs-release-pc1-xenial.deb
apt update
apt upgrade
apt install puppetmaster-passenger
systemctl stop apache2
puppet resource package puppetmaster ensure=latest
#/etc/puppet/puppet.conf
[main]
server=malc.mbadley-home.com
dns_alt_names=puppet,malc.mbadley-home.com
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
prerun_command=/etc/puppet/etckeeper-commit-pre
postrun_command=/etc/puppet/etckeeper-commit-post
[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY
systemctl start puppetmaster
netstat -anpl | grep 8140
#puppet client
apt install puppet
#/etc/hosts
192.168.0.20 puppet
#/etc/puppet/puppet.conf
[main]
server=puppet
dns_alt_names=puppet,malc.mbadley-home.com
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
prerun_command=/etc/puppet/etckeeper-commit-pre
postrun_command=/etc/puppet/etckeeper-commit-post
[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY
systemctl restart puppet
puppet agent --enable
puppet agent -t
#puppet master
puppet cert list
puppet cert sign
#sample module on puppet master
mkdir /etc/puppet/modules/accounts
cd /etc/puppet/modules/accounts
mkdir {examples,files,manifests,templates}
#/etc/puppet/modules/accounts/manifests/init.pp
class accounts {
include groups
include ssh
$rootgroup = $osfamily ? {
'Debian' => 'sudo',
'RedHat' => 'wheel',
default => warning('This distribution is not supported by the Accounts module'),
}
user { 'username':
ensure => present,
home => '/home/username',
shell => '/bin/bash',
managehome => true,
gid => 'username',
groups => "$rootgroup",
password => '$1$Olmk/xeo$omWw2PyDs16f9wjwLVWWp0',
}
}
#/etc/puppet/modules/accounts/examples/init.pp
include accounts
#/etc/puppet/modules/accounts/manifests/groups.pp
class accounts::groups {
group { 'username':class accounts::ssh {
$sshname = $osfamily ? {
'Debian' => 'ssh',
'RedHat' => 'sshd',
default => warning('This distribution is not supported by the Accounts module'),
}
file { '/etc/ssh/sshd_config':
ensure => present,
source => 'puppet:///modules/accounts/sshd_config',
notify => Service["$sshname"],
}
service { "$sshname":
hasrestart => true,
}
}
ensure => present,
}
}
#/etc/puppet/modules/accounts/manifests/ssh.pp
class accounts::ssh {
$sshname = $osfamily ? {
'Debian' => 'ssh',
'RedHat' => 'sshd',
default => warning('This distribution is not supported by the Accounts module'),
}
file { '/etc/ssh/sshd_config':
ensure => present,
source => 'puppet:///modules/accounts/sshd_config',
notify => Service["$sshname"],
}
service { "$sshname":
hasrestart => true,
}
}
#/etc/puppet/modules/accounts/files/sshd_config
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 1024
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
cd /etc/puppet/modules/accounts/manifests
puppet parser validate init.pp
puppet parser validate groups.pp
puppet parser validate ssh.pp
cd /etc/puppet/modules/accounts/examples
puppet apply --noop init.pp
puppet apply init.pp
#puppet client
puppet test -noops
puppet -t
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment