Viele Administratoren benutzen SSH und melden sich jeden Tag an vielen Maschinen mit unterschiedlichen Passwörtern an.
Das dauert zum einen lange und zum anderen verleitet es einen möglichst kurze, einfache Passwörter zu benutzen.
Die bessere Variante ist, sich per public key einzuloggen.
Sofern man nicht schon einen key hat, z.B. in ~/.ssh, kann man sich einen anlegen.
[root@srv ~]# ssh-keygen
Der public key wird anschließend auf den Server gelegt, den privaten behält man für sich! Es gibt außerdem zwei verschiedene Ansätze: Wenn man sich anmeldet, kann man entweder sofort root sein, oder man bleibt erstmal normaler Benutzer und kann sich später zum root machen.
Nun möchte man natürlich nicht jeden Server per Hand konfigurieren, sonst hat man die Zeitersparnis ganz schnell aufgebraucht. Aber deswegen gibt es ja Puppet, mit dem man Linuxserver zentral konfigurieren kann.
Wir legen uns drei Klassen in Puppet an.
1.) ssh
Mit dieser Klasse wird sichergestellt, dass der ssh-daemon installiert ist, läuft und eine gültige Konfiguration hat.
class ssh {
package {'openssh-server':
ensure => 'present',
}
service {'sshd':
name => 'ssh',
require => Package['openssh-server'],
ensure => 'running',
enable => 'true',
hasstatus => 'true',
hasrestart => 'true',
subscribe => File['/etc/ssh/sshd_config']
}
file {'/etc/ssh/sshd_config':
ensure => 'present',
source => 'puppet:///files/etc/ssh/sshd_config-new',
owner => 'root',
group => 'root',
mode => '644',
}
}
Es ist wichtig, dass für die Authentifizierung als root in der sshd_config unter anderem folgende Werte gesetzt sind:
PermitRootLogin yes
PubkeyAuthentication yes
Außerdem, damit man bei der root Anmeldung immer sieht wer sich genau anmeldet:
LogLevel VERBOSE
2.) ssh keys für root Anmeldung
Hier werden die keys in /root/.ssh/ssh_authorized_key geschoben. Man kann sich anschließend mit
ssh root@system
anmelden ohne das Passwort einzugeben.
class users_root {
ssh_authorized_key {
'Max_Mustermann':
ensure => 'present',
user => 'root',
key => 'vnjklvfAVFNJAAAAAAAAKÖASFV+vfdnjklas/
vfnjklvslöoVFSJOASvmklvaäüvfadhnjuiAAAAyYZH7b9eDNVehtL87t5lJ199IfrU7Tw7+58zAiyYZH7b9eDNVehtL87t5l
J199IfrU7Tw7+58zAivmnjkövfaslAAAA/vnfjakiölvsjkölvfadbnjkö/++vasmnjköv/BGDSAvnkljbdaBFAFDEnjoäöba
BAEjnbiobhuzipy--BAbujpöbhuip//bnjauip vfda/VNÖASÖDKINAAAAsvmklötrrehhjj55öybö',
type => 'ssh-rsa';
}
}
3.) ssh keys für user Anmeldung
In dieser Klasse werden auf allen Systemen Benutzer angelegt und anschließend der public key verteilt.
class users_user {
group {'Firma':
ensure => 'present',
gid => '40000',
}
group {'Firma-IT':
ensure => 'present',
gid => '40001',
}
#Max Mustermann
user {Max_Mustermann':
ensure => 'present',
managehome => 'true',
shell => '/bin/bash',
uid => '35123',
gid => 'Firma',
groups => 'Firma-IT'
}
ssh_authorized_key {'Max_Mustermann':
ensure => 'present',
user => 'Max_Mustermann',
key => 'vnjklvfAVFNJAAAAAAAAKÖASFV+vfdnjklas/
vfnjklvslöoVFSJOASvmklvaäüvfadhnjuiAAAAyYZH7b9eDNVehtL87t5lJ199IfrU7Tw7+58zAiyYZH7b9eDNVehtL87t5l
J199IfrU7Tw7+58zAivmnjkövfaslAAAA/vnfjakiölvsjkölvfadbnjkö/++vasmnjköv/BGDSAvnkljbdaBFAFDEnjoäöba
BAEjnbiobhuzipy--BAbujpöbhuip//bnjauip vfda/VNÖASÖDKINAAAAsvmklötrrehhjj55öybö',[/code]
type => 'ssh-rsa',
require => User['Max_Mustermann']
}
Man will eigentlich (wenn man schon root login erlaubt), wenigstens
PermitRootLogin without-password
setzen.