की पर क्यों जाएँ

पासवर्ड लॉगिन चालू हो, तो जो भी आपके सर्वर के SSH पोर्ट तक पहुँच सकता है, वह अंदाज़ा लगाता रह सकता है। OpenSSH डिफ़ॉल्ट रूप से ऐसा ही आता है: मैनुअल के मुताबिक PasswordAuthentication का डिफ़ॉल्ट yes है। की का अंदाज़ा लगाना कहीं ज़्यादा मुश्किल है, और पासवर्ड बंद करने से खुद पासवर्ड जाँच वाले हिस्से की खामियाँ भी रुक जाती हैं। इस हफ़्ते की Alpine Linux पर OpenSSH की खामी इसका उदाहरण है: Alpine की सलाह कहती है कि जिन सर्वर पर पासवर्ड लॉगिन बंद है, वे प्रभावित नहीं हैं।

आपको सर्वर पर ऐसा यूज़र अकाउंट चाहिए जिसमें आप पहले से लॉगिन कर पाते हों और जिसे sudo या doas इस्तेमाल करने की अनुमति हो।

1. अपने कंप्यूटर पर की बनाएँ

यह कमांड सर्वर पर नहीं, अपने कंप्यूटर पर चलाएँ:

ssh-keygen -t ed25519

सामान्य जगह चुनने के लिए Enter दबाएँ और एक पासफ़्रेज़वह पासवर्ड जो की वाली फ़ाइल को ही सुरक्षित रखता है, ताकि फ़ाइल की चोरी हुई कॉपी से अकेले लॉगिन न हो सके डालें। आपके होम फ़ोल्डर के .ssh फ़ोल्डर में दो फ़ाइलें बनेंगी: id_ed25519, यानी प्राइवेट की, जो कभी आपके कंप्यूटर से बाहर नहीं जाती, और id_ed25519.pub, यानी पब्लिक की, जो सर्वर पर जाती है।

2. पब्लिक की सर्वर पर कॉपी करें

Linux और macOS पर:

ssh-copy-id user@server

यह आख़िरी बार आपका पासवर्ड पूछता है और सर्वर पर ~/.ssh/authorized_keys में की जोड़ देता है। अगर ssh-copy-id उपलब्ध नहीं है, जैसे Windows पर, तो id_ed25519.pub खोलें, उसकी इकलौती लाइन कॉपी करें और सर्वर पर ~/.ssh/authorized_keys में पेस्ट करें। .ssh फ़ोल्डर सिर्फ़ आप पढ़ सकें (chmod 700 ~/.ssh और chmod 600 ~/.ssh/authorized_keys)।

3. कुछ भी बदलने से पहले की जाँचें

मौजूदा सेशन खुला रखें। एक नई टर्मिनल विंडो में ssh user@server चलाएँ। अगर यह की का पासफ़्रेज़ पूछे या सीधे लॉगिन कर दे, तो की काम कर रही है। अगर यह अकाउंट का पासवर्ड पूछे, तो रुकें और पहले की ठीक करें, वरना अगले कदम में आप खुद को बाहर बंद कर लेंगे।

4. पासवर्ड लॉगिन बंद करें

सर्वर पर, SSH सर्वर की सेटिंग में ये दो लाइनें जोड़ें, /etc/ssh/sshd_config में या, अगर आपका सिस्टम उस फ़ोल्डर का इस्तेमाल करता है, तो /etc/ssh/sshd_config.d/ में एक नई फ़ाइल में:

PasswordAuthentication no

KbdInteractiveAuthentication no

दूसरी लाइन पासवर्ड जैसे दूसरे तरीके, keyboard-interactiveलॉगिन का ऐसा तरीका जिसमें सर्वर प्रॉम्प्ट के ज़रिए सवाल पूछता है, आम तौर पर पासवर्ड; इस सेटिंग का पुराना नाम ChallengeResponseAuthentication है, को बंद करती है। root अकाउंट के लिए OpenSSH का डिफ़ॉल्ट, PermitRootLogin prohibit-password, पहले से पासवर्ड लॉगिन रोकता है।

एक जाल है। मैनुअल कहता है कि हर सेटिंग के लिए "पहली मिली वैल्यू इस्तेमाल होगी"। कुछ सिस्टम, जिनमें कुछ क्लाउड इमेज भी हैं, sshd_config.d में अपनी फ़ाइल रखते हैं जो PasswordAuthentication yes सेट करती है, और अगर वह फ़ाइल पहले पढ़ी जाए, तो आपकी लाइन का कोई असर नहीं होता। कदम 6 बताता है कि इसे कैसे पकड़ें।

5. फ़ाइल जाँचें और सेवा रीस्टार्ट करें

sudo sshd -t चलाएँ। यह कॉन्फ़िगरेशन जाँचता है और सब ठीक हो तो कुछ नहीं दिखाता। फिर SSH सेवा रीस्टार्ट करें:

  • Debian और Ubuntu: sudo systemctl restart ssh
  • Fedora, Red Hat और इनके जैसे: sudo systemctl restart sshd
  • Alpine: rc-service sshd restart

अगला कदम पूरा होने तक पुराना सेशन खुला रखें।

6. पक्का करें कि बदलाव काम कर गया

सर्वर पर चलाएँ:

sudo sshd -T | grep -i -E 'passwordauthentication|kbdinteractiveauthentication'

sshd -T वे सेटिंग दिखाता है जो sshd सचमुच इस्तेमाल करेगा। दोनों लाइनें no पर खत्म होनी चाहिए। अगर कोई yes कहे, तो /etc/ssh/sshd_config.d/ में वह फ़ाइल ढूँढें जो इसे पहले सेट करती है।

अपने कंप्यूटर से ज़बरदस्ती पासवर्ड लॉगिन आज़माएँ:

ssh -o PubkeyAuthentication=no user@server

सर्वर को "Permission denied (publickey)" के साथ मना करना चाहिए। आपका सामान्य ssh user@server की के साथ काम करता रहना चाहिए।

अगर कुछ गड़बड़ हो जाए

अगर पहुँच चली जाए, तो अपने होस्टिंग प्रोवाइडर या वर्चुअल मशीन सॉफ़्टवेयर का कंसोल इस्तेमाल करें, बदलाव वापस लें और SSH सेवा रीस्टार्ट करें। इसीलिए पुराना सेशन आख़िर तक खुला रखा जाता है। अपनी प्राइवेट की की एक कॉपी किसी सुरक्षित जगह रखें: अगर इकलौती कॉपी खो गई, तो नई पब्लिक की जोड़ने के लिए आपको वही कंसोल चाहिए होगा।

स्रोत

इस लेख के लिए हमने ये मूल स्रोत जाँचे: