
🔐 Легковесная 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
| Параметр |
|---|
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
| Код | Значение |
|---|---|
0 | Успех: все пользователи обработаны или пропущены |
1 | Ошибка: как минимум один пользователь не синхронизирован |
authorized_keys с правильными правами доступаЕсли любой из источников не удалось получить, AuthKeySync прерывает обновление для этого пользователя, чтобы предотвратить блокировку. Ваш существующий доступ остаётся нетронутым.
Если вы считаете AuthKeySync полезным, пожалуйста, поставьте ему звезду на GitHub и подпишитесь на меня в X (Twitter) для получения обновлений:
Лицензия MIT. Подробности см. в LICENSE.
| Параметр | Тип | По умолчанию | Описание |
|---|
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 | Таймаут запроса в секундах |
| Параметр | Описание |
|---|
--config <path> | Путь к файлу конфигурации (по умолчанию: /etc/authkeysync/config.yaml) |
--dry-run | Имитировать синхронизацию без изменения каких-либо файлов |
--debug | Включить отладочное логирование (самый подробный режим) |
--quiet | Показывать только предупреждения и ошибки (рекомендуется для cron) |
--silent | Показывать только ошибки (самый тихий режим) |
--version | Показать информацию о версии и выйти |
--help | Показать справку |