
🔐 Легковесная CLI-утилита, предназначенная для синхронизации публичных SSH-ключей из удалённых URL в локальные файлы authorized_keys
Автоматическая синхронизация открытых SSH-ключей с удалённых URL-адресов на ваши серверы
Управление SSH-доступом на нескольких серверах — это боль:
authorized_keys на каждом сервереAuthKeySync — это лёгкий CLI-инструмент, который загружает открытые SSH-ключи по URL-адресам (GitHub, GitLab, собственный API) и синхронизирует их на ваши серверы. Он безопасен, надёжен и предназначен для автоматизации.
# /etc/authkeysync/config.yaml
users:
- username: "deploy"
sources:
- url: "https://github.com/your-username.keys"
- url: "https://github.com/another-username.keys"
Запустите authkeysync (вручную или через cron) — и ваш authorized_keys обновлён. Вот и всё.
Скачайте последний бинарный файл со страницы релизов:
# 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/
Создайте файл конфигурации в /etc/authkeysync/config.yaml:
policy:
backup_enabled: true # Создавать резервные копии перед изменениями (по умолчанию: true)
backup_retention_count: 10 # Количество хранимых резервных копий (по умолчанию: 10)
preserve_local_keys: true # Сохранять ключи, отсутствующие в удалённых источниках (по умолчанию: true)
users:
- username: "root"
sources:
- url: "https://github.com/your-username.keys"
# Сначала проверьте с помощью dry-run
sudo authkeysync --dry-run
# Применить изменения
sudo authkeysync
Настройте задачу cron или таймер systemd для периодического запуска:
# Каждые 5 минут (используйте --quiet, чтобы уменьшить шум в логах cron)
echo "*/5 * * * * root /usr/local/bin/authkeysync --quiet" | sudo tee /etc/cron.d/authkeysync
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
backup_enabled | bool | true | Создавать резервные копии перед изменением authorized_keys |
backup_retention_count | int | 10 | Количество хранимых файлов резервных копий для каждого пользователя |
preserve_local_keys | bool | true | Сохранять существующие ключи, отсутствующие в удалённых источниках |
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
username | string | Да | Имя системного пользователя (например, root, deploy) |
sources | list | Да | Список источников ключей |
| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
url | string | (обязательно) | URL, возвращающий открытые SSH-ключи в виде обычного текста |
method | string | GET | HTTP-метод: GET или POST |
headers | map | {} | Пользовательские HTTP-заголовки (например, для аутентификации) |
body | string | "" | Тело запроса для POST-запросов |
timeout_seconds | int | 10 | Таймаут запроса в секундах |
policy:
backup_enabled: true
backup_retention_count: 10
preserve_local_keys: true
users:
- username: "deploy"
sources:
# Простые ключи GitHub
- url: "https://github.com/your-username.keys"
# Частный API с аутентификацией
- 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
| Параметр | Описание |
|---|---|
--config <path> | Путь к файлу конфигурации (по умолчанию: /etc/authkeysync/config.yaml) |
--dry-run | Имитировать синхронизацию без изменения каких-либо файлов |
--debug | Включить отладочное логирование (самый подробный режим) |
--quiet | Показывать только предупреждения и ошибки (рекомендуется для cron) |
--silent | Показывать только ошибки (самый тихий режим) |
--version | Показать информацию о версии и выйти |
--help | Показать справку |
| Код | Значение |
|---|---|
0 | Успех: все пользователи обработаны или пропущены |
1 | Ошибка: как минимум один пользователь не синхронизирован |