
🔐 원격 URL의 SSH 공개 키를 로컬 authorized_keys 파일로 동기화하도록 설계된 경량 CLI 유틸리티
원격 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 | 실패: 최소 한 명 이상의 사용자 동기화 실패 |
authorized_keys를 원자적으로 업데이트합니다소스 가져오기에 실패하면 AuthKeySync는 잠금을 방지하기 위해 해당 사용자의 업데이트를 중단합니다. 기존 접근 권한은 그대로 유지됩니다.
AuthKeySync가 유용하다고 생각되시면 GitHub에서 Star를 눌러주시고 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 | 도움말 메시지 표시 |