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?

  1. Einrichten einer möglichen Kontrollmaschine
  2. Benutzer und SSH-Schlüssel definieren
  3. Bestandsdatei erstellen
  4. Ansible Playbook erstellen
  5. Bereitstellen von Servern mit dem Playbook
  6. 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

Einrichten einer möglichen Kontrollmaschine

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.

Benutzer hinzufügen

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.

Define User and SSH Key

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).

Benutzer und Passwort wurden definiert

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.

Neues Inventar anlegen

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.

Ansible Playbook erstellen

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.

Führen Sie das Playbook aus

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.

Testen von Ansible

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.

Verbindung zum Testserver

Ein weiterer Test

Die Bereitstellung eines neuen Benutzers und ssh-Schlüssels mit ansible wurde erfolgreich abgeschlossen.

Referenz

Das könnte dich auch interessieren …