
🔐 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 |
|---|
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
| Código | Significado |
|---|---|
0 | Éxito: todos los usuarios procesados u omitidos |
1 | Fallo: al menos un usuario no pudo sincronizarse |
authorized_keys con los permisos adecuadosSi falla la descarga de alguna fuente, AuthKeySync aborta la actualización para ese usuario para evitar bloqueos. Tu acceso existente permanece intacto.
Si encuentras útil AuthKeySync, considera darle una estrella en GitHub y seguirme en X (Twitter) para recibir actualizaciones:
Licencia MIT. Consulta LICENSE para más detalles.
| 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 |
| 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 |
| 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 |