Mittels Ansible neuen Benutzer mit Key-Authentifizierung für Fremdsystem anlegen

Datum

Hinweis: Ich gehe in meinem Beitrag ausschließlich von Debian GNU/Linux 8 (Jessie) aus. Es wird hier Ansible Version 2.7.0 eingesetzt. Ansible verwendet auf allen Zielsystemen den Benutzernamen monitoring und ist der Gruppe sudo zugewiesen und darf sämtliche Operationen ohne Passwortabfrage durchführen. Dafür ist die Anmeldung des Benutzers auf die IP-Adresse des Ansible-Hosts begrenzt.

Wenn z. B. ein neues Monitoring-System integriert werden soll, ist es sehr wahrscheinlich, dass man dafür einen neuen Benutzer auf allen Linux-Systemen anlegen möchte. Und es ist auch ratsam hier Key-Authentifizierung anzuwenden.

Das kann man per Ansible gut einrichten. Zunächst brauchen wir den Public Key des Systems, das letztenendes auf die Zielsysteme zugreifen soll. Diesen schreiben wir in eine Datei, authorized_keys, mit „ssh-rsa“ davor, und ohne jegliche Zeilenumbrüche:

ssh-rsa AAAAB3NzaC[...]yQoY5tQ==

Anschließend kopieren wir unsere authorized_keys auf die Zielsysteme:

for h in $(ansible-inventory --list | grep -E '".{0,2}$' | grep -v 'ansible_connection' | sed 's/[ "]//g' | sed 's/,$//'); do scp authorized_keys $h:~; done

Hier habe ich keinen einfacheren Weg gefunden alle Hosts in einer Schleife durchzugehen.

Dann richten wir per Ansible einen neuen Benutzer ein, legen den Ordner .ssh an und verschieben die soeben kopierte Datei dort hinein und passen auch gleich die Berechtigungen an:

ansible all -m shell -a 'adduser --disabled-password --gecos "" monitoring && mkdir /home/monitoring/.ssh && mv /home/ansible/authorized_keys /home/monitoring/.ssh/ && chown -R monitoring.monitoring /home/monitoring/.ssh && chmod 700 /home/monitoring/.ssh && chmod 600 /home/monitoring/.ssh/authorized_keys'

Sofern in der Datei /etc/ssh/sshd_config eine Zeile mit AllowUsers zu finden ist, muss hier natürlich noch der Zugriff gewährt werden und kann zugleich auf die IP des Monitoring-Dienstes begrenzt werden. Wir gehen in dem Beispiel vom Benutzer monitoring aus, und das Monitoring läuft auf dem System mit der IP-Adresse 192.168.1.20:

ansible all -m shell -a "o=\$(grep -n '^AllowUsers ' /etc/ssh/sshd_config); n=\$(echo \$o | cut -d':' -f1); l=\$(echo \$o | cut -d':' -f2-); sed -i \"\${n}s/\$l/\$l monitoring@192.168.1.20/g\" /etc/ssh/sshd_config && /etc/init.d/ssh restart"

Anschließend sollte das Monitoring-System sich bereits mit seinem Private Key anmelden können.

Diese ganze Prozedur ist z. B. dann hilfreich, wenn es sich um ein Windowssystem handelt, welches sich per SSH auf den Zielsystemen anmelden können muss.

Autor
Kategorien Ansible, Debian GNU/Linux

PRTG Map