#!/bin/bash # Configuration URL="https://git.1337733.xyz/martin/sshconfig/raw/branch/main/authorized_keys" LOCAL_FILE="$HOME/.ssh/authorized_keys" BACKUP_FILE="$HOME/.ssh/authorized_keys.bak" # 1. Vorbereitung: Verzeichnis erstellen und lokale Datei sicherstellen mkdir -p ~/.ssh && chmod 700 ~/.ssh touch "$LOCAL_FILE" # 2. Backup erstellen (Sicherheit geht vor!) cp "$LOCAL_FILE" "$BACKUP_FILE" # 3. Remote-Keys in temporäre Datei laden temp_keys=$(mktemp) curl -s "$URL" > "$temp_keys" # Falls der Download leer war, abbrechen um nichts zu beschädigen if [ ! -s "$temp_keys" ]; then echo "Fehler: Konnte Keys nicht von Gitea laden oder Datei ist leer." rm "$temp_keys" exit 1 fi # 4. Der Smart-Merge # Wir nehmen die lokale Datei ZUERST, dann die neuen Keys. # awk '!visited[$0]++' behält nur das erste Vorkommen jeder Zeile. # Bestehende Keys (auch fremde) bleiben also unberührt an ihrem Platz. awk '!visited[$0]++' "$LOCAL_FILE" "$temp_keys" > "${LOCAL_FILE}.tmp" # 5. Statistik berechnen old_count=$(wc -l < "$LOCAL_FILE") new_count=$(wc -l < "${LOCAL_FILE}.tmp") diff=$((new_count - old_count)) # 6. Datei ersetzen und aufräumen mv "${LOCAL_FILE}.tmp" "$LOCAL_FILE" chmod 600 "$LOCAL_FILE" rm "$temp_keys" if [ $diff -gt 0 ]; then echo "✔ Fertig! $diff neue Zeile(n) wurden hinzugefügt." echo "Bestehende Keys wurden nicht verändert." else echo "✔ Alles aktuell. Keine neuen Keys gefunden." fi