Files
sshconfig/import_keys.sh
T
2026-05-10 10:42:41 +02:00

47 lines
1.4 KiB
Bash

#!/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