
🔐 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 |
|---|
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
| Code | Bedeutung |
|---|---|
0 | Erfolg: alle Benutzer verarbeitet oder übersprungen |
1 | Fehler: mindestens ein Benutzer konnte nicht synchronisiert werden |
authorized_keys atomar mit den richtigen BerechtigungenWenn eine Quelle nicht abgerufen werden kann, bricht AuthKeySync das Update für diesen Benutzer ab, um Aussperrungen zu verhindern. Ihr bestehender Zugriff bleibt erhalten.
Wenn Sie AuthKeySync nützlich finden, ziehen Sie bitte in Betracht, ihm einen Stern auf GitHub zu geben und mir auf X (Twitter) für Updates zu folgen:
MIT-Lizenz. Siehe LICENSE für Details.
| 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 |
| 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 |
| 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 |