Ansible Tutorial · 6 min read · Nov 16, 2025

Neuen Benutzer und SSH-Schlüssel-Authentifizierung mit Ansible auf Ubuntu 18.04 einrichten

Ansible ist ein einfaches Automatisierungstool, das die Bereitstellung von Softwareanwendungen, Cloud-Bereitstellung und Konfigurationsmanagement automatisiert. Es ist ein Server-Orchestrierungstool, das Ihnen hilft, eine große Anzahl von Serverknoten von einem einzigen Ort aus zu verwalten und zu steuern, den man als “Control Machines” bezeichnet. Ansible wurde 2012 von Michael DeHaan erstellt und ist in Python und Powershell geschrieben.

In diesem Tutorial werden wir lernen, wie man einen neuen Benutzer bereitstellt und die SSH-Schlüsselbasierte Authentifizierung mit dem Automatisierungstool Ansible aktiviert. Wir werden auch lernen, wie man die Ansible “Control Machine” konfiguriert und wie man ein einfaches Ansible-Playbook schreibt.

Voraussetzungen

  • 2 oder mehr Ubuntu 18.04 Server - 10.0.15.10 control-machine
  • 10.0.15.21 ansi01
  • 10.0.15.22 ansi02
  • Root-Rechte

Was werden wir tun?

  1. Ansible Control Machine einrichten
  2. Benutzer und SSH-Schlüssel definieren
  3. Inventar-Datei erstellen
  4. Ansible-Playbook erstellen
  5. Server mit Playbook bereitstellen
  6. Testen

Schritt 1 - Ansible Control Machine einrichten

In diesem Tutorial verwenden wir die Ubuntu 16.04 Server als Ansible “Machine Control” und Ansible-Hosts. Der erste Schritt, den wir unternehmen müssen, ist die Einrichtung der “Control Machine”.

Wir werden Python und Ansible auf der Ansible “Control Machine” installieren, indem wir den folgenden Befehl ausführen.

sudo apt install python ansible -y

Ansible Control Machine einrichten

Nachdem die Installation abgeschlossen ist, werden wir einen neuen Systembenutzer hinzufügen.

Wir werden einen neuen Benutzer namens “provision” hinzufügen, um die Serverbereitstellung mit Ansible durchzuführen.

Fügen Sie den neuen Benutzer “provision” hinzu und geben Sie dem Benutzer ein Passwort.

useradd -m -s /bin/bash provision  
passwd provision

Jetzt fügen Sie den Benutzer “provision” für sudo ohne Passwort hinzu, indem Sie eine neue Konfigurationsdatei unter “/etc/sudoers.d/“ mit dem folgenden Befehl erstellen.

echo  -e 'provision ALL=(ALL)   NOPASSWD:   ALL' > /etc/sudoers.d/provision

Ein neuer Benutzer wurde erstellt, und jetzt kann er sudo ohne Passwort verwenden.

Benutzer hinzufügen

Schritt 2 - Benutzer und SSH-Schlüssel definieren

In diesem Schritt werden wir den Benutzer für Ansible-Hosts definieren. Dieser Benutzer wird automatisch von Ansible erstellt, daher müssen wir nur den Benutzernamen, das Passwort und den SSH-öffentlichen Schlüssel definieren.

Für jeden Server (“ansi01” und “ansi02”) werden wir einen neuen Benutzer namens “provision” mit dem Passwort “secret01” erstellen. Und wir müssen das Passwort “secret01” mit dem Befehl mkpasswd verschlüsseln.

Verschlüsseln Sie das Passwort “secret01” mit dem folgenden Befehl.

mkpasswd --method=SHA-512  
GEBEN SIE DAS PASSWORT 'secret01' EIN

Hinweis:

Stellen Sie sicher, dass das Paket “whois” auf dem System installiert ist, oder Sie können es mit dem folgenden Befehl installieren.

sudo apt install whois -y

Und Sie erhalten das SHA-512-verschlüsselte Passwort.

Als nächstes werden wir einen neuen SSH-Schlüssel generieren.

Melden Sie sich beim Benutzer “provision” an und generieren Sie den SSH-Schlüssel mit dem Befehl ssh-keygen.

su - provision  
ssh-keygen -t rsa

Jetzt wurden der Benutzer und das Passwort definiert, und der SSH-Schlüssel wurde erstellt (befindet sich im Verzeichnis “.ssh”).

Benutzer und Passwort wurden definiert

Schritt 3 - Neues Inventar erstellen

In diesem Schritt werden wir die Inventar-Dateien für alle Server-Hosts definieren.

Melden Sie sich als Benutzer “provision” an und erstellen Sie ein neues Verzeichnis für das Projekt.

su - provision  
mkdir -p ansible01/

Gehen Sie in das Verzeichnis “ansible01” und erstellen Sie eine neue Inventar-Datei “inventory.ini” mit vim.

cd ansible01/  
vim inventory.ini

Fügen Sie die folgende Konfiguration dort ein.

[webserver]  
 ansi01 ansible_host=10.0.15.21  
 ansi02 ansible_host=10.0.15.22

Speichern und beenden.

Jetzt erstellen Sie eine neue Ansible-Konfigurationsdatei “ansible.cfg”.

vim ansible.cfg

Fügen Sie die folgende Konfiguration dort ein.

[defaults]  
 inventory = /home/provision/ansible01/inventory.ini

Speichern und beenden.

Neues Inventar erstellen

Die Ansible-Inventar-Datei wurde erstellt, und unsere Ansible-Skripte werden sich unter dem Benutzer “provision” im Verzeichnis “ansible01” befinden.

Schritt 4 - Ansible-Playbook erstellen

Ein Ansible-Playbook ist eine Reihe von Anweisungen, die Sie senden, um auf einem einzelnen oder einer Gruppe von Server-Hosts ausgeführt zu werden. Es stellt die Ansible-Bereitstellung dar, bei der die Automatisierung als Aufgaben definiert ist, und alle Aufgaben wie das Installieren von Paketen, das Bearbeiten von Dateien werden von Ansible-Modulen durchgeführt.

In diesem Schritt werden wir ein neues Ansible-Playbook erstellen, um einen neuen Benutzer bereitzustellen, den SSH-Schlüssel bereitzustellen und den SSH-Dienst zu konfigurieren.

Bevor wir ein neues Ansible-Playbook erstellen, werden wir alle Serverfingerabdrücke mit dem Befehl ssh-keyscan scannen, wie unten gezeigt.

ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts  
ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts

Diese Serverfingerabdrücke werden in der Datei “.ssh/known_hosts” gespeichert.

Ansible-Playbook erstellen

Hinweis:

Wenn Sie viele Serverknoten haben, können Sie Ihre Hostliste speichern und dann manuell den SSH-Schlüssel-Fingerabdruck mit einem Bash-Skript scannen, wie unten gezeigt.

for i in $(cat list-hosts.txt)  
do  
ssh-keyscan $i >> ~/.ssh/known_hosts  
done

Als nächstes erstellen Sie das Ansible-Playbook mit dem Namen “deploy-ssh.yml” mit vim.

vim deploy-ssh.yml

Fügen Sie das folgende Ansible-Playbook dort ein.

---  
 - hosts: all  
   vars:  
     - provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0'  
  gather_facts: no  
   remote_user: root  
   
   tasks:  
   
   - name: Fügen Sie einen neuen Benutzer namens provision hinzu  
     user:  
          name=provision  
          password={{ provision_password }}  
   
   - name: Fügen Sie den Benutzer provision zu den Sudoers hinzu  
     copy:  
          dest: "/etc/sudoers.d/provision"  
          content: "provision  ALL=(ALL)  NOPASSWD: ALL"  
   
   - name: SSH-Schlüssel bereitstellen  
     authorized_key: user=provision  
                     key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"  
                     state=present  
   
   - name: Passwortauthentifizierung deaktivieren  
     lineinfile:  
           dest=/etc/ssh/sshd_config  
           regexp='^PasswordAuthentication'  
           line="PasswordAuthentication no"  
           state=present  
           backup=yes  
     notify:  
       - restart ssh  
   
   - name: Root-Login deaktivieren  
     lineinfile:  
           dest=/etc/ssh/sshd_config  
           regexp='^PermitRootLogin'  
           line="PermitRootLogin no"  
           state=present  
           backup=yes  
     notify:  
       - restart ssh  
   
   handlers:  
   - name: restart ssh  
     service:  
       name=sshd  
       state=restarted

Speichern und beenden.

Im Playbook-Skript:

  • erstellen wir das Playbook-Skript “deploy-ssh.yml”, das auf allen Servern angewendet wird, die in der Datei “inventory.ini” definiert sind.
  • wir erstellen die Ansible-Variable “provision_password”, die das verschlüsselte Passwort für den neuen Benutzer enthält.
  • Setzen Sie die Ansible-Fakten auf “nein”.
  • Definieren Sie den “root”-Benutzer als Remote-Benutzer, um die Automatisierung von Aufgaben durchzuführen.
  • Wir erstellen neue Aufgaben zum Hinzufügen eines neuen Benutzers, fügen den Benutzer zu den Sudoers hinzu und laden den SSH-Schlüssel hoch.
  • Wir erstellen neue Aufgaben zur Konfiguration der SSH-Dienste, deaktivieren den Root-Login und deaktivieren die Passwortauthentifizierung. Aufgaben zur Konfiguration der SSH werden die “restart ssh”-Handler auslösen.
  • Wir erstellen einen Handler zum Neustarten des SSH-Dienstes.

Schritt 5 - Das Playbook ausführen

Melden Sie sich beim Benutzer “provision” an und gehen Sie in das Verzeichnis “ansible01”.

su - provision  
cd ansible01/

Jetzt führen Sie das Playbook “deploy-ssh.yml” mit dem folgenden Befehl aus.

ansible-playbook deploy-ssh.yml --ask-pass

Geben Sie Ihr Root-Passwort ein, und Sie erhalten das Ergebnis wie unten.

Das Playbook ausführen

Alle Aufgaben zur Bereitstellung eines neuen Benutzers und SSH-Schlüssels wurden erfolgreich abgeschlossen.

Schritt 6 - Testen

Testen Sie mit dem Ansible-Befehl.

ansible webserver -m ping  
ansible webserver -m shell -a id

Jetzt erhalten Sie die grünen Nachrichten wie unten.

Ansible testen

Jetzt können wir die Server “ansi01” und “ansi02” mit Ansible verwalten, und der Benutzer “provision” wird der Standardbenutzer für Ansible sein.

Verbindung zu den Servern testen

ssh 10.0.15.21  
ssh 10.0.15.22

Und Sie werden mit jedem Server unter Verwendung des Standard-Schlüssels “.ssh/id_rsa” und des Benutzers “provision” verbunden.

Serververbindung testen

Ein weiterer Test

Die Bereitstellung eines neuen Benutzers und SSH-Schlüssels mit Ansible wurde erfolgreich abgeschlossen.

Referenz

Share: X/Twitter LinkedIn

Erhalte neue Beiträge in deinem Posteingang.

Kein Spam. Jederzeit abmelden.