Initial
This commit is contained in:
1 parent
2bc2921c00
commit
2d36bee975
10 files changed
+275
No files matched your search
@@ -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"
|
||||
Reference in new issue
Block a user