
🔐 Leichtgewichtiges CLI-Dienstprogramm zum Synchronisieren von SSH-Public-Keys aus Remote-URLs in lokale authorized_keys-Dateien
SSH-Public-Keys automatisch von entfernten URLs auf Ihre Server synchronisieren
Die Verwaltung des SSH-Zugriffs über mehrere Server hinweg ist mühsam:
authorized_keys auf jedem Server aktualisierenAuthKeySync ist ein leichtgewichtiges CLI, das SSH-Public-Keys von URLs abruft (GitHub, GitLab, eigene API) und sie mit Ihren Servern synchronisiert. Es ist sicher, zuverlässig und für die Automatisierung konzipiert.
# /etc/authkeysync/config.yaml
users:
- username: "deploy"
sources:
- url: "https://github.com/your-username.keys"
- url: "https://github.com/another-username.keys"
Führen Sie authkeysync aus (manuell oder per Cron), und Ihre authorized_keys wird aktualisiert. Das war's.
Laden Sie die neueste Binärdatei von der Release-Seite herunter:
# Linux AMD64
curl -Lo authkeysync https://github.com/eduardolat/authkeysync/releases/latest/download/authkeysync-linux-amd64
chmod +x authkeysync
sudo mv authkeysync /usr/local/bin/
Erstellen Sie eine Konfigurationsdatei unter /etc/authkeysync/config.yaml:
policy:
backup_enabled: true # Create backups before changes (default: true)
backup_retention_count: 10 # Number of backups to keep (default: 10)
preserve_local_keys: true # Keep keys not in remote sources (default: true)
users:
- username: "root"
sources:
- url: "https://github.com/your-username.keys"
# Test first with dry-run
sudo authkeysync --dry-run
# Apply changes
sudo authkeysync
Richten Sie einen Cron-Job oder einen systemd-Timer ein, der regelmäßig ausgeführt wird:
# Every 5 minutes (use --quiet to reduce log noise in cron)
echo "*/5 * * * * root /usr/local/bin/authkeysync --quiet" | sudo tee /etc/cron.d/authkeysync
| Option | Type | Default | Description |
|---|---|---|---|
backup_enabled | bool | true | Backups erstellen, bevor authorized_keys geändert wird |
backup_retention_count | int | 10 | Anzahl der Backup-Dateien, die pro Benutzer aufbewahrt werden |
preserve_local_keys | bool | true | Vorhandene Keys behalten, die nicht in den Remote-Quellen enthalten sind |
| Option | Type | Required | Beschreibung |
|---|---|---|---|
username | string | Ja | System-Benutzername (z. B. root, deploy) |
sources | list | Ja | Liste der Key-Quellen |
| Option | Type | Default | Beschreibung |
|---|---|---|---|
url | string | (erforderlich) | URL, die SSH-Keys als Klartext zurückgibt |
method | string | GET | HTTP-Methode: GET oder POST |
headers | map | {} | Benutzerdefinierte HTTP-Header (z. B. für die Authentifizierung) |
body | string | "" | Anfragetext (Body) für POST-Anfragen |
timeout_seconds | int | 10 | Anfrage-Timeout in Sekunden |
policy:
backup_enabled: true
backup_retention_count: 10
preserve_local_keys: true
users:
- username: "deploy"
sources:
# Simple GitHub keys
- url: "https://github.com/your-username.keys"
# Private API with authentication
- url: "https://keys.yourcompany.com/api/keys"
method: "POST"
headers:
Authorization: "Bearer your-secret-token"
Content-Type: "application/json"
body: '{"environment": "production"}'
timeout_seconds: 5
| Option | Beschreibung |
|---|---|
--config <path> | Pfad zur Konfigurationsdatei (Standard: /etc/authkeysync/config.yaml) |
--dry-run | Sync simulieren, ohne Dateien zu verändern |
--debug | Debug-Logging aktivieren (ausführlichste Ausgabe) |
--quiet | Nur Warnungen und Fehler anzeigen (für Cron empfohlen) |
--silent | Nur Fehler anzeigen (ruhigste Ausgabe) |
--version | Versionsinformationen anzeigen und beenden |
--help | Hilfemeldung anzeigen |
| Code | Bedeutung |
|---|---|
0 | Erfolg: alle Benutzer verarbeitet oder übersprungen |
1 | Fehler: mindestens ein Benutzer konnte nicht synchronisiert werden |