自动从远程 URL 同步 SSH 公钥到您的服务器
📖 完整文档
跨多台服务器管理 SSH 访问非常痛苦:
authorized_keysAuthKeySync 是一个轻量级 CLI,它从 URL(GitHub、GitLab、你自己的 API)获取 SSH 公钥并将其同步到你的服务器。它安全、可靠,专为自动化而设计。
# /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 就会更新。仅此而已。
从 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/
在 /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 | (必需) | 返回纯文本 SSH 密钥的 URL |
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 | 显示帮助信息 |