
🔐 दूरस्थ URLs से SSH सार्वजनिक कुंजियों को स्थानीय authorized_keys फ़ाइलों में सिंक्रनाइज़ करने के लिए डिज़ाइन की गई हल्की-फुल्की CLI उपयोगिता
दूरस्थ URLs से SSH सार्वजनिक कुंजियों को स्वचालित रूप से आपके सर्वरों पर सिंक्रनाइज़ करें
कई सर्वरों पर SSH एक्सेस प्रबंधित करना कष्टदायक है:
authorized_keys अपडेट करना पड़ता हैAuthKeySync एक हल्का CLI है जो URLs (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 # 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"
# पहले dry-run के साथ परीक्षण करें
sudo authkeysync --dry-run
# परिवर्तन लागू करें
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
| Option | Type | Default | Description |
|---|---|---|---|
backup_enabled | bool | true | authorized_keys को संशोधित करने से पहले बैकअप बनाएँ |
backup_retention_count | int | 10 | प्रति उपयोगकर्ता रखने के लिए बैकअप फ़ाइलों की संख्या |
preserve_local_keys | bool | true | मौजूदा कुंजियाँ रखें जो दूरस्थ स्रोतों में नहीं हैं |
| Option | Type | Required | Description |
|---|---|---|---|
username | string | Yes | सिस्टम उपयोगकर्ता नाम (जैसे, root, deploy) |
sources | list | Yes | कुंजी स्रोतों की सूची |
| Option | Type | Default | Description |
|---|---|---|---|
url | string | (required) | 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:
# 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
| Option | Description |
|---|---|
--config <path> | कॉन्फ़िग फ़ाइल का पथ (डिफ़ॉल्ट: /etc/authkeysync/config.yaml) |
--dry-run | किसी भी फ़ाइल को संशोधित किए बिना सिंक का अनुकरण करें |
--debug | डीबग लॉगिंग सक्षम करें (सबसे अधिक विस्तृत) |
--quiet | केवल चेतावनियाँ और त्रुटियाँ दिखाएँ (cron के लिए अनुशंसित) |
--silent | केवल त्रुटियाँ दिखाएँ (सबसे शांत) |
--version | संस्करण जानकारी दिखाएँ और बाहर निकलें |
--help | सहायता संदेश दिखाएँ |
| Code | Meaning |
|---|---|
0 | सफलता: सभी उपयोगकर्ता संसाधित या छोड़े गए |
1 | विफलता: कम से कम एक उपयोगकर्ता सिंक करने में विफल रहा |
authorized_keys को एटॉमिक रूप से अपडेट करता है