This commit is contained in:
gadm committed 2026-08-15 22:17:32 +02:00
1 parent 2bc2921c00
commit 2d36bee975
10 files changed
+275

No files matched your search

+78
View File
@@ -0,0 +1,78 @@
#!/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}" <<EOF
all:
children:
ubuntu_hosts:
hosts:
EOF
fi
# Prüfen ob Host schon existiert
if grep -q "^\s*${NEW_HOST_NAME}:" "${INVENTORY_FILE}"; then
echo ">>> 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"