
🔐 Utilidad CLI ligera diseñada para sincronizar claves públicas SSH desde URLs remotas en archivos authorized_keys locales
Sincroniza automáticamente las claves públicas SSH desde URLs remotas a tus servidores
Gestionar el acceso SSH en múltiples servidores es tedioso:
authorized_keys en cada servidorAuthKeySync es un CLI ligero que obtiene claves públicas SSH desde URLs (GitHub, GitLab, tu propia API) y las sincroniza con tus servidores. Es seguro, fiable y diseñado para la automatización.
# /etc/authkeysync/config.yaml
users:
- username: "deploy"
sources:
- url: "https://github.com/your-username.keys"
- url: "https://github.com/another-username.keys"
Ejecuta authkeysync (manualmente o mediante cron) y tu authorized_keys se actualiza. Eso es todo.
Obtén el último binario desde la página de lanzamientos:
# 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/
Crea un archivo de configuración en /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"
# Prueba primero con dry-run
sudo authkeysync --dry-run
# Aplica los cambios
sudo authkeysync
Configura una tarea cron o un timer systemd para que se ejecute periódicamente:
# Cada 5 minutos (usa --quiet para reducir el ruido de logs en cron)
echo "*/5 * * * * root /usr/local/bin/authkeysync --quiet" | sudo tee /etc/cron.d/authkeysync
| Opción | Tipo | Por defecto | Descripción |
|---|---|---|---|
backup_enabled | bool | true | Crear copias de seguridad antes de modificar authorized_keys |
backup_retention_count | int | 10 | Número de archivos de copia a conservar por usuario |
preserve_local_keys | bool | true | Mantener claves existentes que no están en fuentes remotas |
| Opción | Tipo | Requerido | Descripción |
|---|---|---|---|
username | string | Sí | Nombre de usuario del sistema (p. ej., root, deploy) |
sources | list | Sí | Lista de fuentes de claves |
| Opción | Tipo | Por defecto | Descripción |
|---|---|---|---|
url | string | (obligatorio) | URL que devuelve claves SSH en texto plano |
method | string | GET | Método HTTP: GET o POST |
headers | map | {} | Cabeceras HTTP personalizadas (p. ej., para autenticación) |
body | string | "" | Cuerpo de la solicitud para peticiones POST |
timeout_seconds | int | 10 | Tiempo de espera de la solicitud en segundos |
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
| Opción | Descripción |
|---|---|
--config <path> | Ruta al archivo de configuración (por defecto: /etc/authkeysync/config.yaml) |
--dry-run | Simular la sincronización sin modificar ningún archivo |
--debug | Habilitar registro de depuración (más verboso) |
--quiet | Mostrar solo advertencias y errores (recomendado para cron) |
--silent | Mostrar solo errores (menos verboso) |
--version | Mostrar información de versión y salir |
--help | Mostrar mensaje de ayuda |
| Código | Significado |
|---|---|
0 | Éxito: todos los usuarios procesados u omitidos |
1 | Fallo: al menos un usuario no pudo sincronizarse |