#!/bin/bash # Konfiguration NEW_HOST_NAME="zotac" # Name im Inventory NEW_HOST_IP="192.168.0.155" # IP-Adresse SSH_USER="ladm" # Remote Benutzer INVENTORY_FILE="inventory.yml" SSH_KEY_DIR="$HOME/.ssh" SSH_KEY_NAME="id_rsa_${NEW_HOST_NAME}" FULL_KEY_PATH="${SSH_KEY_DIR}/${SSH_KEY_NAME}" echo ">>> Starte Onboarding für ${NEW_HOST_NAME} (${NEW_HOST_IP})..." # 1. SSH-Key generieren (nur wenn nicht vorhanden) if [ ! -f "${FULL_KEY_PATH}" ]; then echo ">>> Generiere neuen SSH-Key: ${SSH_KEY_NAME}" ssh-keygen -t ed25519 -f "${FULL_KEY_PATH}" -N "" -C "ansible-runner-${NEW_HOST_NAME}" else echo ">>> Key existiert bereits: ${SSH_KEY_NAME}" fi # 2. Passwort abfragen für initiale Verbindung echo ">>> Bitte geben Sie das Passwort für ${SSH_USER}@${NEW_HOST_IP} ein, um den Key zu installieren:" read -s SSH_PASS # 3. Key installieren (ssh-copy-id) echo ">>> Installiere SSH-Key auf dem Remote-Host..." # Wir nutzen sshpass, um das Passwort für ssh-copy-id bereitzustellen if command -v sshpass &> /dev/null; then sshpass -p "${SSH_PASS}" ssh-copy-id -o StrictHostKeyChecking=no -i "${FULL_KEY_PATH}.pub" "${SSH_USER}@${NEW_HOST_IP}" if [ $? -eq 0 ]; then echo ">>> Key erfolgreich installiert." else echo ">>> FEHLER: Key-Installation fehlgeschlagen." exit 1 fi else echo ">>> FEHLER: 'sshpass' nicht gefunden. Bitte installieren: sudo apt install sshpass" exit 1 fi # 4. Host zur Inventory.yml hinzufügen echo ">>> Füge Host zu ${INVENTORY_FILE} hinzu..." # Prüfen ob Inventory existiert, sonst Grundgerüst erstellen if [ ! -f "${INVENTORY_FILE}" ]; then cat > "${INVENTORY_FILE}" <>> Host ${NEW_HOST_NAME} existiert bereits im Inventory." else # Host einfügen (einfache Append-Logik für flache Struktur) # Wir fügen ihn unter dem ersten 'hosts:' Eintrag ein oder erstellen die Struktur if grep -q "hosts:" "${INVENTORY_FILE}"; then # Einfügen nach der ersten 'hosts:' Zeile (vereinfacht für dieses Skript) # Für komplexe YAML-Strukturen wäre ein Python/Ansible-Skript safer, aber dies reicht für flache Listen sed -i "/hosts:/a\ ${NEW_HOST_NAME}:\n ansible_host: ${NEW_HOST_IP}\n ansible_user: ${SSH_USER}\n ansible_ssh_private_key_file: ${FULL_KEY_PATH}" "${INVENTORY_FILE}" else # Fallback falls Struktur anders ist echo ">>> WARNUNG: Komplexe Inventory-Struktur erkannt. Manuelles Hinzufügen empfohlen." echo "Fügen Sie manuell hinzu:" echo " ${NEW_HOST_NAME}:" echo " ansible_host: ${NEW_HOST_IP}" echo " ansible_user: ${SSH_USER}" echo " ansible_ssh_private_key_file: ${FULL_KEY_PATH}" exit 1 fi fi echo ">>> Onboarding abgeschlossen!" echo ">>> Testen Sie die Verbindung mit: ansible ${NEW_HOST_NAME} -i ${INVENTORY_FILE} -m ping"