SSH-Schlüssel und Privilegienerweiterung konfigurieren

LinuxBeginner
Jetzt üben

Einführung

Der Zugriff auf verwaltete Knoten (Managed Nodes) ist die Grundlage für die Automatisierung mit Ansible. In realen Umgebungen verbindet sich Ansible in der Regel über SSH und nutzt für administrative Aufgaben eine Privilegienerweiterung (Privilege Escalation).

In diesem Lab wird ein temporärer verwalteter Benutzer namens rhce_node erstellt. Sie werden einen SSH-Schlüssel generieren, diesen für den Benutzer autorisieren, den Inventory-Zugriff konfigurieren und sowohl die normale SSH-Ausführung als auch den become-Zugriff überprüfen.

Das SSH-Übungsprojekt erstellen

In diesem Schritt erstellen Sie die Projektverzeichnisse und die Ansible-Standardeinstellungen für den SSH-basierten Zugriff. Das verwaltete Konto existiert bereits, vertraut Ihrem Schlüssel jedoch noch nicht.

Erstellen Sie das Projektverzeichnis und wechseln Sie hinein.

cd /home/labex/project
mkdir -p rhce-ansible/{inventory,keys,playbooks}
cd rhce-ansible

Erstellen Sie die Datei ansible.cfg.

cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
interpreter_python = auto_silent
EOF

Dieses Projekt verwendet später im Lab eine echte SSH-Verbindung zu 127.0.0.1. Das Verzeichnis keys hält das Lab-Schlüsselpaar von Ihren normalen ~/.ssh-Dateien getrennt, und host_key_checking = False verhindert eine interaktive Abfrage während dieser kontrollierten lokalen Übung.

Ein SSH-Schlüsselpaar generieren

In diesem Schritt erstellen Sie ein Ed25519-SSH-Schlüsselpaar. Der private Schlüssel verbleibt in keys/rhce_ed25519; der öffentliche Schlüssel kann sicher auf einem verwalteten Konto installiert werden. Die Option -N '' erstellt einen Schlüssel ohne Passphrase für die Lab-Automatisierung.

Bevor Sie Befehle in diesem Schritt ausführen, kehren Sie zum Ansible-Projektverzeichnis zurück. Dies stellt sicher, dass die Befehle konsistent bleiben, auch wenn LabEx jeden Schritt separat ausführt.

cd /home/labex/project/rhce-ansible

Generieren Sie das Schlüsselpaar.

ssh-keygen -t ed25519 -f keys/rhce_ed25519 -N '' -C rhce-ansible-lab

Dies erstellt zwei Dateien. keys/rhce_ed25519 ist der private Schlüssel und muss privat bleiben; keys/rhce_ed25519.pub ist der öffentliche Schlüssel, der im Konto des verwalteten Benutzers installiert werden kann.

Überprüfen Sie den öffentlichen Schlüssel.

cat keys/rhce_ed25519.pub

Die Zeile des öffentlichen Schlüssels sollte mit ssh-ed25519 beginnen und mit dem Kommentar rhce-ansible-lab enden. Sie werden diesen öffentlichen Schlüssel, nicht den privaten, in die Datei authorized_keys kopieren.

Den Schlüssel für den verwalteten Benutzer autorisieren

In diesem Schritt installieren Sie den öffentlichen Schlüssel für den temporären verwalteten Benutzer. Sie ändern nicht den LabEx-SSH-Zugriff für den Benutzer labex; Sie bereiten lediglich rhce_node für dieses Lab vor.

Bevor Sie Befehle in diesem Schritt ausführen, kehren Sie zum Ansible-Projektverzeichnis zurück.

cd /home/labex/project/rhce-ansible

Erstellen Sie das .ssh-Verzeichnis des verwalteten Benutzers.

sudo mkdir -p /home/rhce_node/.ssh

SSH sucht nach vertrauenswürdigen öffentlichen Schlüsseln im .ssh-Verzeichnis des Benutzers. Sie benötigen hier sudo, da das Verzeichnis zum Home-Verzeichnis eines anderen Benutzers gehört.

Installieren Sie Ihren öffentlichen Schlüssel als authorized_keys.

sudo cp keys/rhce_ed25519.pub /home/rhce_node/.ssh/authorized_keys

Korrigieren Sie Eigentumsrechte und Berechtigungen. SSH verweigert die Verwendung von Schlüsseln, wenn Verzeichnisse oder Dateien zu offen sind.

sudo chown -R rhce_node:rhce_node /home/rhce_node/.ssh
sudo chmod 700 /home/rhce_node/.ssh
sudo chmod 600 /home/rhce_node/.ssh/authorized_keys

Die Berechtigungswerte sind bewusst gewählt: 700 erlaubt nur rhce_node den Zugriff auf das .ssh-Verzeichnis, und 600 erlaubt nur diesem Benutzer das Lesen oder Schreiben der authorized_keys. Diese Prüfungen verhindern eine versehentliche Offenlegung von Anmeldedaten.

Inventory für den SSH-Zugriff konfigurieren

In diesem Schritt erstellen Sie einen Inventory-Eintrag, der Ansible mitteilt, wie eine Verbindung zum verwalteten Benutzer über SSH auf dem Localhost hergestellt werden soll.

Bevor Sie Befehle in diesem Schritt ausführen, kehren Sie zum Ansible-Projektverzeichnis zurück.

cd /home/labex/project/rhce-ansible

Schreiben Sie das Inventory.

cat > inventory/hosts <<'EOF'
[managed]
node1 ansible_host=127.0.0.1 ansible_user=rhce_node ansible_ssh_private_key_file=/home/labex/project/rhce-ansible/keys/rhce_ed25519
EOF

Diese Inventory-Zeile trennt den Ansible-Namen von den Verbindungsdetails. node1 ist der Inventory-Alias, ansible_host ist die Zieladresse, ansible_user ist das Remote-Konto und ansible_ssh_private_key_file verweist auf den privaten Schlüssel.

Testen Sie SSH direkt, bevor Sie Ansible verwenden.

ssh -i keys/rhce_ed25519 -o StrictHostKeyChecking=no rhce_node@127.0.0.1 'whoami'

Der Befehl sollte rhce_node ausgeben.

Das direkte Testen von SSH grenzt die Fehlerquelle ein, falls Ansible später fehlschlagen sollte. Wenn die direkte SSH-Anmeldung nicht funktioniert, beheben Sie Probleme mit dem Schlüssel, den Eigentumsrechten, den Berechtigungen oder den Inventory-Verbindungswerten, bevor Sie Ansible-Module untersuchen.

Ansible Ping und Become validieren

In diesem Schritt testen Sie die Ansible-Konnektivität und die Privilegienerweiterung. Die Option -b steht für become, was Ansible anweist, das Modul mit erweiterten Rechten auszuführen.

Bevor Sie Befehle in diesem Schritt ausführen, kehren Sie zum Ansible-Projektverzeichnis zurück.

cd /home/labex/project/rhce-ansible

Führen Sie das Ansible-Ping-Modul über SSH aus.

ansible managed -m ansible.builtin.ping

Diesmal verwendet das ping-Modul keine lokale Verbindungsabkürzung. Ansible sollte sich als rhce_node verbinden, ein kleines Modul übertragen, es mit Python ausführen und pong zurückgeben.

Führen Sie einen Befehl mit Privilegienerweiterung aus. Der Befehl id -u gibt 0 aus, wenn er als Root ausgeführt wird.

ansible managed -b -m ansible.builtin.command -a 'id -u'

Das Flag -b aktiviert become für diesen Befehl. Ein Ergebnis, das 0 enthält, beweist, dass der verwaltete Benutzer die Privilegien über die für das Lab erstellte Sudoers-Regel erweitern kann.

Erstellen Sie eine Datei im Besitz von Root unter Verwendung von Ansible become.

ansible managed -b -m ansible.builtin.copy -a 'content=become_ready dest=/etc/rhce-ansible-become.txt mode=0644'

Das Schreiben unter /etc erfordert administrative Rechte. Dieser letzte Befehl beweist also mehr als nur die Konnektivität: Er bestätigt, dass Ansible sowohl über SSH verbinden als auch bei Bedarf privilegierte Systemänderungen vornehmen kann.

Zusammenfassung

Sie haben ein SSH-Schlüsselpaar generiert, es für einen temporären verwalteten Benutzer autorisiert, den SSH-basierten Inventory-Zugriff konfiguriert und die Privilegienerweiterung mit Ansible become validiert.