
リモートURLからSSH公開鍵を自動的にサーバーへ同期します
複数のサーバーにまたがるSSHアクセスの管理は大変です:
authorized_keysを更新する必要があるAuthKeySyncは、URL(GitHub、GitLab、独自API)からSSH公開鍵を取得し、サーバーに同期する軽量CLIです。安全で信頼性が高く、自動化を前提に設計されています。
# /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 # 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"
# Test first with dry-run
sudo authkeysync --dry-run
# Apply changes
sudo authkeysync
cronジョブまたはsystemdタイマーを設定して定期的に実行します:
# Every 5 minutes (use --quiet to reduce log noise in 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:
# 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
| コード | 意味 |
|---|---|
0 | 成功:すべてのユーザーが処理またはスキップされた |
1 | 失敗:少なくとも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 | ヘルプメッセージを表示 |