GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Neue Benutzer- und SSH-Schlüsselauthentifizierung einrichten. mit Ansible auf Ubuntu 18.04

Ansible ist ein einfaches Automatisierungstool, das die Bereitstellung von Softwareanwendungen, die Cloud-Bereitstellung und das Konfigurationsmanagement automatisiert. Es ist ein Server-Orchestrierungstool, das Ihnen hilft, eine große Anzahl von Serverknoten von einzelnen Orten aus, die als „Steuerungsmaschinen“ bezeichnet werden, zu verwalten und zu steuern. Ansible wurde 2012 von Michael DeHaan erstellt und ist in Python und Powershell geschrieben.

In diesem Tutorial erfahren wir, wie Sie einen neuen Benutzer bereitstellen und die schlüsselbasierte SSH-Authentifizierung mit dem Automatisierungstool Ansible aktivieren. 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      Steuermaschine
    • 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. Inventardatei 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 tun müssen, ist die Einrichtung der „Kontrollmaschine“.

Wir werden Python und Ansible auf der Ansible-Steuermaschine installieren, indem wir den folgenden Befehl ausführen.

sudo apt install python ansible -y

Nachdem die Installation abgeschlossen ist, fügen wir einen neuen Systembenutzer hinzu.

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

Neuen Benutzer 'provision' hinzufügen und dem Benutzer ein Passwort geben.

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

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

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

Ein neuer Benutzer wurde erstellt und kann jetzt 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, also müssen wir nur den Benutzernamen, das Passwort und den öffentlichen SSH-Schlüssel definieren.

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
GEBEN SIE DAS PASSWORT „secret01“ EIN

Hinweis:

Stellen Sie sicher, dass das Whois-Paket auf dem System installiert ist, oder installieren Sie es mit dem folgenden Befehl.

sudo apt install whois -y

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

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

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

Nun sind Benutzer und Passwort definiert und der ssh-Schlüssel erstellt worden (befindet sich im '.ssh'-Verzeichnis).

Schritt 3 – Neues Inventar erstellen

In diesem Schritt definieren wir die Inventardateien für alle Serverhosts.

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

su - Provision
mkdir -p ansible01/

Wechseln Sie in das Verzeichnis „ansible01“ und erstellen Sie mit vim eine neue Inventardatei „inventory.ini“.

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.

[Standardwerte]
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 Sie ein Ansible-Playbook

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

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

Bevor wir ein neues Ansible-Playbook erstellen, scannen wir alle Server-Fingerabdrücke mit dem Befehl ssh-keyscan wie unten beschrieben.

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

Dieser Fingerabdruck des Servers wird in der Datei „.ssh/known_hosts“ gespeichert.

Hinweis:

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

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

Erstellen Sie als Nächstes das ansible Playbook mit dem Namen „deploy-ssh.yml“ mit vim.

vim deploy-ssh.yml

Fügen Sie dort das Ansible-Playbook ein.

---
- hosts:all
  vars:
    - provision_password:'$6$w9S3t7x1kRtmG0u$6nVU9KZsC12Q8DYI4FtgKPy.e/cq/jseB/.DViTO1SpUnoCy.dxcOf8hyfitGq5V0yhgXccJ.I3Sl0m2>  collect_facts:no
  remote_user:root

  task:

  - name:Fügen Sie einen neuen Benutzer namens "provision" hinzu
    user:
         name=Provision
         password={{ Provision_password }}

  - Name:Provisionsbenutzer zu den Sudoers hinzufügen
    copy:
         Ziel:"/etc/sudoers.d/provision "
         Inhalt:"provision  ALL=(ALL)  NOPASSWD:ALL"

  - Name:SSH-Schlüssel bereitstellen
    authorisierter_Schlüssel:user=provision
                    key="{{ lookup('file', '/home/provision/.ssh/id_rsa.pub') }}"
                    state=present

  - name:Kennwortauthentifizierung deaktivieren
    lineinfile:
          dest=/etc/ssh/sshd_config
          regexp='^PasswordAuthentication'
          line="PasswordAuthentic ation no"
          state=present
          backup=yes
    notification:
      - ssh neu starten

  - name:Root-Login deaktivieren
    lineinfile:
          dest=/etc/ssh/sshd_config
          regexp='^PermitRootLogin'
          line="PermitRootLogin no"
          state=present
          backup=yes
Benachrichtigung:
      - ssh neu starten

  handlers:
  - name:ssh neu starten
    service:
      name=sshd
      state=restarted

Speichern und beenden.

Im 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 Aufgabenautomatisierung 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 zum Konfigurieren der ssh-Dienste, zum Deaktivieren der Root-Anmeldung und zum Deaktivieren der Kennwortauthentifizierung. Aufgaben zum Konfigurieren von ssh lösen die 'restart ssh'-Handler aus.
  • Wir erstellen einen Handler, um den SSH-Dienst neu zu starten.

Schritt 5 – Führen Sie das Playbook aus

Melden Sie sich beim Benutzer ‚provision‘ an und gehen Sie zum Verzeichnis ‚ansible01‘.

su - Bereitstellung
cd ansible01/

Führen Sie nun das Playbook „deploy-ssh.yml“ mit dem unten gezeigten Befehl aus.

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

Geben Sie Ihr Root-Passwort ein und Sie erhalten das folgende Ergebnis.

Alle Aufgaben zum Bereitstellen 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.

Jetzt können wir diese „ansi01“- und „ansi02“-Server mit Ansible verwalten, und der „provision“-Benutzer wird der Standardbenutzer für Ansible.

Verbindung zu den Servern testen

ssh 10.0.15.21
ssh 10.0.15.22

Und Sie werden mit jedem Server verbunden, indem Sie die Standardschlüsseldatei „.ssh/id_rsa“ und den Benutzer „provision“ verwenden.

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


Ubuntu
  1. Ersteinrichtung des Servers mit Ubuntu 14.04

  2. StrongSwan-basiertes IPsec-VPN mit Zertifikaten und vorinstalliertem Schlüssel auf Ubuntu 16.04

  3. So verwenden Sie Ansible zum Installieren und Konfigurieren von Redis 6 unter Ubuntu 20.04

  4. Verwenden von Ansible zum Installieren und Konfigurieren von Elasticsearch unter Ubuntu 20.04

  5. OpenVPN-Server unter Ubuntu 20.04 installieren und einrichten

So richten Sie ein VPN unter Ubuntu ein

So installieren Sie Ansible unter Ubuntu 20.04

So werden Sie Root-Benutzer in der Ubuntu-Befehlszeile mit su und sudo

Richten Sie die passwortlose SSH-Anmeldung für mehrere Remote-Server mit Skript ein

Wie richte ich die ssh-schlüsselbasierte Authentifizierung für Github mithilfe der Datei ~/.ssh/config ein?

So installieren Sie Ansible unter Ubuntu 18.04