
🔐 Utilitário CLI leve projetado para sincronizar chaves públicas SSH de URLs remotas para arquivos authorized_keys locais
Sincronizar automaticamente chaves públicas SSH de URLs remotas para seus servidores
Gerenciar acesso SSH em vários servidores é complicado:
authorized_keys em todos os servidoresAuthKeySync é um CLI leve que busca chaves públicas SSH de URLs (GitHub, GitLab, sua própria API) e as sincroniza com seus servidores. É seguro, confiável e projetado para automação.
# /etc/authkeysync/config.yaml
users:
- username: "deploy"
sources:
- url: "https://github.com/your-username.keys"
- url: "https://github.com/another-username.keys"
Execute authkeysync (manualmente ou via cron), e seu authorized_keys é atualizado. Simples assim.
Obtenha o binário mais recente na página de releases:
# 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/
Crie um arquivo de configuração em /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"
# Teste primeiro com dry-run
sudo authkeysync --dry-run
# Aplique as alterações
sudo authkeysync
Configure um cron job ou timer systemd para execução periódica:
# A cada 5 minutos (use --quiet para reduzir ruído no log do 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:
# Chaves simples do GitHub
- url: "https://github.com/your-username.keys"
# API privada com autenticação
- 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 | Meaning |
|---|---|
0 | Sucesso: todos os usuários processados ou ignorados |
1 | Falha: pelo menos um usuário falhou na sincronização |
authorized_keys com as permissões corretasSe alguma fonte falhar ao buscar, o AuthKeySync aborta a atualização para aquele usuário para evitar bloqueios. Seu acesso existente permanece intacto.
Se você achar AuthKeySync útil, considere dar uma estrela no GitHub e me seguir no X (Twitter) para atualizações:
Licença MIT. Consulte LICENSE para detalhes.
| Option | Type | Default | Description |
|---|
backup_enabled | bool | true | Criar backups antes de modificar authorized_keys |
backup_retention_count | int | 10 | Número de arquivos de backup a manter por usuário |
preserve_local_keys | bool | true | Manter chaves existentes que não estão em fontes remotas |
| Type |
|---|
| Required |
|---|
| Description |
|---|
username | string | Yes | Nome de usuário do sistema (ex.: root, deploy) |
sources | list | Yes | Lista de fontes de chaves |
| Option | Type | Default | Description |
|---|
url | string | (required) | URL que retorna chaves SSH em texto puro |
method | string | GET | Método HTTP: GET ou POST |
headers | map | {} | Cabeçalhos HTTP personalizados (ex.: para autenticação) |
body | string | "" | Corpo da requisição para requisições POST |
timeout_seconds | int | 10 | Tempo limite da requisição em segundos |
| Option | Description |
|---|
--config <path> | Caminho para o arquivo de configuração (padrão: /etc/authkeysync/config.yaml) |
--dry-run | Simular sincronização sem modificar nenhum arquivo |
--debug | Habilitar log de depuração (mais verboso) |
--quiet | Mostrar apenas avisos e erros (recomendado para cron) |
--silent | Mostrar apenas erros (mais silencioso) |
--version | Mostrar informações da versão e sair |
--help | Mostrar mensagem de ajuda |