import_config.sh aktualisiert

This commit is contained in:
2026-05-16 13:32:22 +02:00
parent 535788af87
commit 4b35947de1
+32 -24
View File
@@ -1,30 +1,30 @@
#!/bin/bash #!/bin/bash
# Erzwinge die Eingabe über das Terminal, damit 'curl | bash' interaktiv bleibt
exec < /dev/tty
CONFIG_FILE="$HOME/.ssh/config" CONFIG_FILE="$HOME/.ssh/config"
CONFIG_BAK="$HOME/.ssh/config.bak.$(date +%F_%T)" CONFIG_BAK="$HOME/.ssh/config.bak.$(date +%F_%T)"
# URL zur VERSCHLÜSSELTEN Config (passe den Dateinamen ggf. an) # URL zur VERSCHLÜSSELTEN Config (Passe die URL ggf. an deine Gitea-Instanz an)
REMOTE_ENC_URL="https://git.1337733.xyz/martin/sshconfig/raw/branch/main/config.enc" REMOTE_ENC_URL="https://git.1337733.xyz/martin/sshconfig/raw/branch/main/config.enc"
echo "=== SSH Config Sync ===" echo "=== SSH Config Sync ==="
echo "1) Lokale Config verschlüsseln (für den Upload in Git)" echo "1) Lokale Config verschlüsseln (für den Upload/Copy-Paste in Git)"
echo "2) Verschlüsselte Config aus dem Git entschlüsselt im Terminal ausgeben" echo "2) Verschlüsselte Config aus dem Git entschlüsselt im Terminal ausgeben"
echo "3) Merge: Remote Config entschlüsseln & lokal FEHLENDE Hosts ergänzen" echo "3) Merge: Remote Config entschlüsseln & lokal FEHLENDE Hosts ergänzen"
echo "4) Sync: Remote Config entschlüsseln & lokale Version EXAKT überschreiben" echo "4) Sync: Remote Config entschlüsseln & lokale Version EXAKT überschreiben"
echo "5) Lokal: Neuen SSH-Host interaktiv anlegen" echo "5) Lokal: Neuen SSH-Host interaktiv anlegen"
echo "=======================" echo "======================="
read -p "Wähle eine Option (1-5): " OPTION
# Passwortabfrage nur für Optionen 1 bis 4 # Liest die Auswahl direkt vom Terminal, um Pipe-Kompatibilität zu sichern
read -p "Wähle eine Option (1-5): " OPTION < /dev/tty
# Passwortabfrage nur für die Git-Verschlüsselungs-Optionen 1 bis 4
if [[ "$OPTION" =~ ^[1-4]$ ]]; then if [[ "$OPTION" =~ ^[1-4]$ ]]; then
read -s -p "Verschlüsselungskennwort für Git-Sync: " PASS read -s -p "Verschlüsselungskennwort für Git-Sync: " PASS < /dev/tty
echo "" echo ""
fi fi
# Hilfsfunktion für den Download und die Entschlüsselung # Hilfsfunktion für den Download und die Entschlüsselung (inklusive Base64-Dekodierung via -a)
decrypt_remote() { decrypt_remote() {
curl -sL "$REMOTE_ENC_URL" | openssl enc -d -aes-256-cbc -pbkdf2 -iter 100000 -salt -pass pass:"$PASS" 2>/dev/null curl -sL "$REMOTE_ENC_URL" | openssl enc -d -aes-256-cbc -a -pbkdf2 -iter 100000 -salt -pass pass:"$PASS" 2>/dev/null
} }
case $OPTION in case $OPTION in
@@ -33,8 +33,10 @@ case $OPTION in
echo "Fehler: $CONFIG_FILE nicht gefunden!" echo "Fehler: $CONFIG_FILE nicht gefunden!"
exit 1 exit 1
fi fi
openssl enc -aes-256-cbc -pbkdf2 -iter 100000 -salt -in "$CONFIG_FILE" -out config.enc -pass pass:"$PASS" # Verschlüsselt im aktuellen Verzeichnis als reine Textdatei (Base64 dank -a)
echo "Erfolg: Die Datei wurde als 'config.enc' im aktuellen Verzeichnis verschlüsselt." openssl enc -aes-256-cbc -a -pbkdf2 -iter 100000 -salt -in "$CONFIG_FILE" -out config.enc -pass pass:"$PASS"
echo "Erfolg: Die Datei wurde als textbasierte 'config.enc' im aktuellen Verzeichnis erstellt."
echo "Du kannst den Inhalt jetzt öffnen, kopieren und in Gitea einfügen."
;; ;;
2) 2)
echo "--- Entschlüsselte Config ---" echo "--- Entschlüsselte Config ---"
@@ -51,6 +53,9 @@ case $OPTION in
exit 1 exit 1
fi fi
# Sicherstellen, dass die lokale Datei existiert
mkdir -p "$HOME/.ssh" && touch "$CONFIG_FILE"
echo "Suche nach fehlenden Einträgen..." echo "Suche nach fehlenden Einträgen..."
awk -v local_conf="$CONFIG_FILE" ' awk -v local_conf="$CONFIG_FILE" '
BEGIN { print_block = 0 } BEGIN { print_block = 0 }
@@ -67,6 +72,7 @@ case $OPTION in
if (print_block == 1) print $0 if (print_block == 1) print $0
}' "$TMP_DEC" >> "$CONFIG_FILE" }' "$TMP_DEC" >> "$CONFIG_FILE"
chmod 600 "$CONFIG_FILE"
echo "Erfolg: Fehlende Einträge wurden an $CONFIG_FILE angehängt." echo "Erfolg: Fehlende Einträge wurden an $CONFIG_FILE angehängt."
rm -f "$TMP_DEC" rm -f "$TMP_DEC"
;; ;;
@@ -80,45 +86,47 @@ case $OPTION in
exit 1 exit 1
fi fi
# Backup der alten Config erstellen, falls vorhanden
if [ -f "$CONFIG_FILE" ]; then if [ -f "$CONFIG_FILE" ]; then
cp "$CONFIG_FILE" "$CONFIG_BAK" cp "$CONFIG_FILE" "$CONFIG_BAK"
echo "Backup der lokalen Config unter $CONFIG_BAK erstellt." echo "Backup der lokalen Config unter $CONFIG_BAK erstellt."
fi fi
# Exakter Sync (Überschreiben)
mkdir -p "$HOME/.ssh"
mv "$TMP_DEC" "$CONFIG_FILE" mv "$TMP_DEC" "$CONFIG_FILE"
chmod 600 "$CONFIG_FILE" chmod 600 "$CONFIG_FILE"
echo "Erfolg: Lokale Config wurde exakt mit der Git-Version synchronisiert (überschrieben)." echo "Erfolg: Lokale Config wurde exakt mit der Git-Version synchronisiert."
;; ;;
5) 5)
echo "--- Neuen Host anlegen ---" echo "--- Neuen Host anlegen ---"
read -p "Host Alias (z.B. 'webserver' oder 'pi'): " NEW_HOST read -p "Host Alias (z.B. 'webserver' oder 'pi'): " NEW_HOST < /dev/tty
# Validierung: Leerer Hostname macht keinen Sinn
if [ -z "$NEW_HOST" ]; then if [ -z "$NEW_HOST" ]; then
echo "Fehler: Der Host Alias darf nicht leer sein. Abbruch." echo "Fehler: Der Host Alias darf nicht leer sein. Abbruch."
exit 1 exit 1
fi fi
read -p "HostName (IP-Adresse oder Domain): " NEW_HOSTNAME read -p "HostName (IP-Adresse oder Domain): " NEW_HOSTNAME < /dev/tty
read -p "Benutzername (User, z.B. 'root'): " NEW_USER read -p "Benutzername (User, z.B. 'root'): " NEW_USER < /dev/tty
# Port mit Fallback auf 22 # Port mit Fallback auf 22
read -p "Port (Standard: 22 - Einfach Enter drücken): " NEW_PORT read -p "Port (Standard: 22 - Einfach Enter drücken): " NEW_PORT < /dev/tty
NEW_PORT=${NEW_PORT:-22} NEW_PORT=${NEW_PORT:-22}
# Key-File mit Fallback auf den Standardpfad # Key-File mit Fallback auf den Standardpfad (leer lassen)
read -p "IdentityFile (Pfad zum Key, leer = ~/.ssh/id_rsa): " NEW_KEY read -p "IdentityFile (Pfad zum Key, leer = Standard-Keys nutzen): " NEW_KEY < /dev/tty
# ServerAliveInterval Abfrage (Y/N) # ServerAliveInterval Abfrage (j/n)
read -p "Soll ServerAliveInterval (Verhindert Timeout) gesetzt werden? (j/n): " ADD_ALIVE read -p "Soll ServerAliveInterval (Verhindert Timeout) gesetzt werden? (j/n): " ADD_ALIVE < /dev/tty
# Ins Config-File schreiben # Ordnerstrukturen und Rechte absichern
# Sicherstellen, dass das Verzeichnis existiert und Berechtigungen stimmen
mkdir -p "$HOME/.ssh" mkdir -p "$HOME/.ssh"
chmod 700 "$HOME/.ssh" chmod 700 "$HOME/.ssh"
touch "$CONFIG_FILE" touch "$CONFIG_FILE"
chmod 600 "$CONFIG_FILE" chmod 600 "$CONFIG_FILE"
# Host-Eintrag generieren
{ {
echo "" echo ""
echo "Host $NEW_HOST" echo "Host $NEW_HOST"
@@ -132,7 +140,7 @@ case $OPTION in
} >> "$CONFIG_FILE" } >> "$CONFIG_FILE"
echo "Erfolg: Host '$NEW_HOST' wurde erfolgreich zu $CONFIG_FILE hinzugefügt." echo "Erfolg: Host '$NEW_HOST' wurde erfolgreich zu $CONFIG_FILE hinzugefügt."
echo "Tipp: Um diese Änderung ins Git zu pushen, nutze nun Option 1." echo "Tipp: Um diese Änderung ins Git zu bringen, führe das Skript erneut aus und wähle Option 1."
;; ;;
*) *)
echo "Ungültige Auswahl. Abbruch." echo "Ungültige Auswahl. Abbruch."