Einrichten eines neuen Benutzers und einer SSH-Schlüsselauthentifizierung mit Ansible unter Ubuntu 18.04.
Ansible ist ein einfaches Automatisierungstool, das die Bereitstellung von Softwareanwendungen, Cloud-Bereitstellung und Konfigurationsmanagement automatisiert. Es ist ein Tool zur Server-Orchestrierung, das Ihnen hilft, eine große Anzahl von Serverknoten von einzelnen Orten aus zu verwalten und zu steuern, die als „Control Machines“ bezeichnet werden. Ansible wurde 2012 von Michael DeHaan gegründet und ist in Python und Powershell geschrieben.
In diesem Tutorial erfahren Sie, wie Sie einen neuen Benutzer bereitstellen und die SSH-Schlüsselbasierte Authentifizierung mit dem Automatisierungstool Ansible aktivieren. Wir werden auch lernen, wie man die Ansible’Control Machine‘ konfiguriert, sowie wie man einfache ansible Playbooks schreibt.
Voraussetzungen
- 2 oder mehr Ubuntu 18.04 Server
- 10.0.15.10.10 Steuerungsmaschine
- 10.0.15.21 ansi01
- 10.0.15.22 ansi02
- Root-Rechte
Was werden wir tun?
- Einrichten einer möglichen Kontrollmaschine
- Benutzer und SSH-Schlüssel definieren
- Bestandsdatei erstellen
- Ansible Playbook erstellen
- Bereitstellen von Servern mit dem Playbook
- Prüfung
Schritt 1 – Einrichten einer geeigneten Kontrollmaschine
In diesem Tutorial werden wir die Ubuntu 16.04-Server als Ansible’Machine Control‘ und ansible Hosts verwenden. Der erste Schritt, den wir tun müssen, ist die Einrichtung der „Kontrollmaschine“.
Wir werden Python und ansible auf der ansible’control machine‘ installieren, indem wir den folgenden Befehl ausführen.
sudo apt install python ansible -y
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 einen neuen Benutzer’provision‘ hinzu und geben Sie dem Benutzer ein Passwort.
useradd -m -s /bin/bash provision passwd provision
Fügen Sie nun den Benutzer’provision‘ für sudo ohne Passwort hinzu, indem Sie eine neue Konfigurationsdatei unter der Datei’/etc/sudoers.d/‘ mit dem folgenden Befehl erstellen.
echo -e 'provision\tALL=(ALL)\tNOPASSWD:\tALL' > /etc/sudoers.d/provision
Ein neuer Benutzer wurde angelegt, und jetzt kann er sudo ohne Passwort verwenden.
Schritt 2 – Benutzer und SSH-Schlüssel definieren
In diesem Schritt definieren wir den Benutzer für ansible Hosts. Dieser Benutzer wird automatisch von ansible erstellt, so dass wir nur den Benutzernamen, das Passwort und den öffentlichen Schlüssel ssh definieren müssen.
Für jeden Server (‚ansi01′ und’ansi02′) erstellen wir einen neuen Benutzer namens’provision‘ mit dem Passwort’secret01′. 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 TYPE THE PASSWORD 'secret01'
Hinweis:
Stellen Sie sicher, dass das Paket ‚whois‘ auf dem System installiert ist, oder Sie können die Installation mit dem folgenden Befehl durchführen.
sudo apt install whois -y
Und Sie erhalten das SHA-512 verschlüsselte Passwort.
Als nächstes erzeugen wir einen neuen ssh-Schlüssel.
Melden Sie sich beim Benutzer „provision“ an und erzeugen Sie den ssh-Schlüssel mit dem Befehl ssh-keygen.
su - provision ssh-keygen -t rsa
Nun sind Benutzer und Passwort definiert und der Schlüssel ssh wurde l(ocated im Verzeichnis ‚.ssh‘ angelegt).
Schritt 3 – Neues Inventar anlegen
In diesem Schritt werden wir die Inventardateien 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 Inventardatei’inventory.ini‘ mit vim.
cd ansible01/ vim inventory.ini
Fügen Sie dort die folgende Konfiguration ein.
[webserver] ansi01 ansible_host=10.0.15.21 ansi02 ansible_host=10.0.15.22
Speichern und beenden.
Erstellen Sie nun eine neue ansible Konfigurationsdatei ‚ansible.cfg‘.
vim ansible.cfg
Fügen Sie dort die folgende Konfiguration ein.
[defaults] inventory = /home/provision/ansible01/inventory.ini
Speichern und beenden.
Die ansible Inventardatei wurde erstellt, und unsere ansible Skripte befinden sich unter dem Benutzer’provision‘ im Verzeichnis’ansible01′.
Schritt 4 – Erstellen eines geeigneten Playbooks
Ansible Playbook ist eine Reihe von Anweisungen, die Sie senden, um sie auf einem einzelnen oder einer Gruppe von Server-Hosts auszuführen. Es stellt das ansible provisioning dar, wobei die Automatisierung als Aufgaben definiert ist, und alle Aufgaben wie die Installation von Paketen, die Bearbeitung von Dateien, werden von ansiblen Modulen durchgeführt.
In diesem Schritt erstellen wir ein neues ansibles Playbook, um einen neuen Benutzer bereitzustellen, den ssh-Schlüssel bereitzustellen und den ssh-Dienst zu konfigurieren.
Bevor wir ein neues ansibles Playbook erstellen, scannen wir alle Fingerabdrücke des Servers mit dem Befehl ssh-keyscan wie unten beschrieben.
ssh-keyscan 10.0.15.21 >> ~/.ssh/known_hosts ssh-keyscan 10.0.15.22 >> ~/.ssh/known_hosts
Der Fingerabdruck dieses Servers wird in der Datei ‚.ssh/known_hosts‘ gespeichert.
Hinweis:
Wenn Sie viele Serverknoten haben, können Sie Ihre Host-Liste speichern und dann den Fingerabdruck des ssh-Schlüssels manuell mit dem 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 namens’deploy-ssh.yml‘ mit vim.
vim deploy-ssh.yml
Einfügen nach dem ansiblen Spielbuch dort.
--- - hosts: all vars: - provision_password: '$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccxzlqm2o.I3SlDJ0' gather_facts: no remote_user: root tasks: - name: Add a new user named provision user: name=provision password={{ provision_password }} - name: Add provision user to the sudoers copy: dest: "/etc/sudoers.d/provision" content: "provision ALL=(ALL) NOPASSWD: ALL" - name: Deploy SSH Key authorized_key: user=provision key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}" state=present - name: Disable Password Authentication lineinfile: dest=/etc/ssh/sshd_config regexp='^PasswordAuthentication' line="PasswordAuthentication no" state=present backup=yes notify: - restart ssh - name: Disable Root Login 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.
Auf dem Playbook-Skript:
- wir erstellen das Playbook-Skript’deploy-ssh.yml‘, das auf alle Server 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 für das Hinzufügen eines neuen Benutzers, fügen den Benutzer zu den Sudoers hinzu und laden den ssh-Schlüssel hoch.
- Wir erstellen neue Aufgaben für die Konfiguration der ssh-Dienste, die Deaktivierung des Root-Logins und die Deaktivierung der Passwortauthentifizierung. Aufgaben zur Konfiguration des ssh lösen die’restart ssh‘ Handler aus.
- Wir erstellen einen Handler, um den ssh-Dienst neu zu starten.
Schritt 5 – Ausführen des Playbooks
Melden Sie sich beim Benutzer „provision“ an und gehen Sie in das Verzeichnis „ansible01“.
su - provision cd ansible01/
Führen Sie nun das Playbook’deploy-ssh.yml‘ mit dem Befehl aus, wie unten gezeigt.
ansible-playbook deploy-ssh.yml --ask-pass
Geben Sie Ihr Root-Passwort ein, und Sie erhalten das Ergebnis wie unten beschrieben.
Alle Aufgaben zur Bereitstellung eines neuen Benutzers und eines ssh-Schlüssels wurden erfolgreich abgeschlossen.
Schritt 6 – Prüfung
Testen Sie mit dem Befehl ansible.
ansible webserver -m ping ansible webserver -m shell -a id
Nun erhalten Sie die grünen Meldungen wie unten beschrieben.
Jetzt können wir diese ‚ansi01‘ und ‚ansi02‘ Server mit Ansible verwalten, und der ‚provision‘ Benutzer wird 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 über den Standardschlüssel ‚.ssh/id_rsa‘ Datei und über den Benutzer ‚provision‘ verbunden.
Die Bereitstellung eines neuen Benutzers und ssh-Schlüssels mit ansible wurde erfolgreich abgeschlossen.