इस लेख में हम Windows पर RSA कुंजियों के साथ SSH प्रमाणीकरण कॉन्फ़िगर करेंगे ताकि रिमोट सर्वर/कंप्यूटर को सुरक्षित रूप से एक्सेस किया जा सके। हम दिखाएंगे कि Windows पर RSA कुंजियाँ (सर्टिफिकेट) कैसे जनरेट करें और Windows 10/Windows Server 2019 पर अंतर्निहित OpenSSH सर्वर को कुंजी-आधारित प्रमाणीकरण के लिए कॉन्फ़िगर करें (पासवर्ड के बिना रिमोट होस्ट पर प्रमाणीकरण की अनुमति देता है)।
SSH कुंजी-आधारित प्रमाणीकरण Linux दुनिया में व्यापक रूप से उपयोग किया जाता है, लेकिन Windows में यह हाल ही में दिखाई दिया है। विचार यह है कि क्लाइंट की पब्लिक कुंजी SSH सर्वर पर जोड़ी जाती है, और जब क्लाइंट इससे कनेक्ट करने का प्रयास करता है, तो सर्वर जांचता है कि क्या क्लाइंट के पास संबंधित प्राइवेट कुंजी है।
Windows पर SSH (RSA) जनरेट करना
आपको उस क्लाइंट कंप्यूटर पर दो RSA कुंजियाँ (पब्लिक और प्राइवेट) जनरेट करनी होंगी जिसका उपयोग आप रिमोट Windows सर्वर से कनेक्ट करने के लिए करेंगे जो OpenSSH चला रहा है। एक प्राइवेट कुंजी क्लाइंट साइड पर स्टोर की जाती है (इसे किसी को न दें!), और एक पब्लिक कुंजी SSH सर्वर पर authorized_keys फ़ाइल में जोड़ी जाती है। Windows क्लाइंट पर RSA कुंजियाँ जनरेट करने के लिए, आपको OpenSSH क्लाइंट इंस्टॉल करना होगा।
Windows 10 1809 (और नए) और Windows Server 2019 में, OpenSSH क्लाइंट एक अलग फीचर के रूप में इंस्टॉल है:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
पिछले Windows संस्करणों में आप GitHub से Win32-OpenSSH पोर्ट इंस्टॉल कर सकते हैं (Windows पर SFTP (SSH FTP) सर्वर सेटअप करने के लेख में उदाहरण देखें)।
एक मानक (गैर-विशेषाधिकार प्राप्त) PowerShell सत्र चलाएं और कमांड का उपयोग करके RSA 2048 कुंजियों की एक जोड़ी जनरेट करें:
ssh-keygen
आपसे प्राइवेट कुंजी की सुरक्षा के लिए पासवर्ड दर्ज करने के लिए कहा जाएगा। यदि आप पासवर्ड निर्दिष्ट करते हैं, तो आपको इस कुंजी का उपयोग SSH प्रमाणीकरण के लिए हर बार दर्ज करना होगा। मैंने कोई पासफ्रेज दर्ज नहीं किया (अनुशंसित नहीं)।

Ssh-keygen वर्तमान Windows यूजर की प्रोफाइल में .ssh डायरेक्टरी बनाएगा (C:\Users\your_username) और इसमें 2 फ़ाइलें रखेगा:
- id_rsa – एक प्राइवेट कुंजी
- id_rsa.pub – एक पब्लिक कुंजी
RSA कुंजियाँ बनाने के बाद, आप प्राइवेट कुंजी को SSH Agent सेवा में जोड़ सकते हैं, जो प्राइवेट कुंजियों को आसानी से प्रबंधित करने और प्रमाणीकरण के लिए उपयोग करने की अनुमति देती है। SSH Agent प्राइवेट कुंजियों को स्टोर करता है और उन्हें वर्तमान यूजर के सुरक्षा संदर्भ में प्रदान करता है। PowerShell सेवा प्रबंधन कमांड का उपयोग करके ssh-agent सेवा चलाएं और इसे ऑटोमैटिक स्टार्टअप के लिए कॉन्फ़िगर करें:
set-service ssh-agent StartupType ‘Automatic’
Start-Service ssh-agent
अपनी प्राइवेट कुंजी को ssh-agent डेटाबेस में जोड़ें:
ssh-add "C:\Users\youruser\.ssh\id_rsa"
या इस प्रकार:
ssh-add.exe $ENV:UserProfile\.ssh\id_rsa
SSH कुंजियों का उपयोग करके प्रमाणित करने के लिए Windows पर OpenSSH सर्वर कॉन्फ़िगर करना
फिर आपके द्वारा क्लाइंट पर जनरेट की गई पब्लिक कुंजी को अपने SSH सर्वर पर कॉपी करें (इस उदाहरण में यह Windows 10 1903 चलाने वाला एक रिमोट कंप्यूटर है जिस पर OpenSSH कॉन्फ़िगर है)।
हम पहले ही विस्तार से चर्चा कर चुके हैं कि Windows में OpenSSH सर्वर कैसे कॉन्फ़िगर करें।
id_rsa.pub फ़ाइल को उस यूजर की प्रोफाइल में .ssh डायरेक्टरी में कॉपी करें जिसका उपयोग आप SSH सर्वर से कनेक्ट करने के लिए करेंगे। उदाहरण के लिए, मेरे Windows 10 में एक admin यूजर है, इसलिए मुझे कुंजी को C:\Users\admin\.ssh\authorized_keys में कॉपी करना होगा।

आप SCP का उपयोग करके पब्लिक कुंजी को SSH सर्वर पर कॉपी कर सकते हैं:
scp C:\Users\youruser\.ssh\id_rsa.pub admin@192.168.1.15:c:\users\admin\.ssh\authorized_keys
अब आप पासवर्ड के बिना अपने Windows SSH सर्वर से कनेक्ट कर सकते हैं। यदि आपने प्राइवेट कुंजी के लिए पासवर्ड (पासफ्रेज) सेट नहीं किया है, तो आप स्वचालित रूप से अपने रिमोट Windows होस्ट से कनेक्ट हो जाएंगे।
नेटिव SSH क्लाइंट का उपयोग करके रिमोट होस्ट से कनेक्ट करने के लिए, आपको निम्न कमांड की आवश्यकता होगी:
ssh (username)@(SSH server name or IP address)
उदाहरण के लिए:
ssh admin@192.168.1.15
इसका मतलब है कि आप admin अकाउंट के तहत IP एड्रेस 192.168.1.15 वाले रिमोट SSH सर्वर से कनेक्ट करना चाहते हैं। SSH Agent प्रमाणीकरण के लिए पहले से सेव की गई प्राइवेट कुंजी का उपयोग करने का प्रयास करेगा।
यदि आप SSH कुंजियों को प्रबंधित करने के लिए ssh-agent सेवा का उपयोग नहीं करना चाहते हैं, तो SSH प्रमाणीकरण के लिए उपयोग की जाने वाली प्राइवेट की फ़ाइल का पथ निर्दिष्ट कर सकते हैं:
ssh admin@192.168.1.15 -i "C:\Users\youruser\.ssh\id_rsa"
यदि आप RSA कुंजी का उपयोग करके अपने SSH सर्वर से कनेक्ट नहीं कर पाए और आपको अभी भी पासवर्ड दर्ज करने के लिए कहा जा रहा है, तो संभावना है कि आप जिस यूजर अकाउंट से कनेक्ट करने का प्रयास कर रहे हैं, वह स्थानीय सर्वर एडमिनिस्ट्रेटर्स ग्रुप का सदस्य है (ग्रुप SID S-1-5-32-544 है)। हम इस पर बाद में चर्चा करेंगे।

स्थानीय एडमिन के तहत Windows में SSH कुंजी का उपयोग करके लॉगिन कैसे करें?
OpenSSH Windows स्थानीय एडमिनिस्ट्रेटर विशेषाधिकारों वाले उपयोगकर्ताओं के लिए विशेष कुंजी-आधारित एक्सेस सेटिंग्स का उपयोग करता है।
सबसे पहले, यूजर प्रोफाइल में authorized_keys फ़ाइल के बजाय C:\ProgramData\ssh\administrators_authorized_keys की फ़ाइल का उपयोग करें। आपको अपनी SSH कुंजी को इस टेक्स्ट फ़ाइल में जोड़ना होगा (सुरक्षा उद्देश्यों के लिए, केवल एडमिनिस्ट्रेटर्स ग्रुप और SYSTEM के पास इस फ़ाइल को पढ़ने की अनुमति होनी चाहिए)।
यूजर प्रोफाइल से authorized_keys फ़ाइल का उपयोग करने के लिए और पब्लिक कुंजी डेटा को administrators_authorized_keys फ़ाइल में ले जाने के बजाय, आप OpenSSH कॉन्फ़िगरेशन फ़ाइल (C:\ProgramData\ssh\sshd_config) में संबंधित लाइन को कमेंट कर सकते हैं।
इन लाइनों को कमेंट करें:
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

sshd_config फ़ाइल में RSA कुंजियों का उपयोग करके Windows एक्सेस की अनुमति दें:
PubkeyAuthentication yes
और SSH पासवर्ड लॉगिन अक्षम करें:
PasswordAuthentication no
sshd_config में परिवर्तन सहेजने के बाद sshd सेवा को पुनरारंभ करना न भूलें।
restart-service sshd
यहां एक और महत्वपूर्ण बात है। पुराने OpenSSH संस्करणों में आपको authorized_keys फ़ाइल पर NT Service\sshd को पढ़ने की अनुमति देनी होती थी।
ऐसा करने के लिए, आपको निम्न में से एक करना होगा:
- OpenSSHUtils मॉड्यूल इंस्टॉल करें:
Install-Module -Force OpenSSHUtils -Scope AllUsers। फ़ाइल अनुमतियों को बदलने के लिए, यह कमांड चलाएं: Repair-AuthorizedKeyPermission -FilePath C:\Users\admin\.ssh\authorized_keys
- NTFSSecurity मॉड्यूल या icacls का उपयोग करके फ़ाइल के लिए NTFS अनुमतियां बदलें;
- या आप sshd_config फ़ाइल में StrictModes अक्षम कर सकते हैं। डिफ़ॉल्ट रूप से, यह मोड सक्षम है और कुंजी-आधारित प्रमाणीकरण को रोकता है, यदि पब्लिक और प्राइवेट कुंजियाँ अच्छी तरह से सुरक्षित नहीं हैं। लाइन
#StrictModes yesको अनकमेंट करें, और इसेStrictModes noपर बदलें।
तो आपने Windows पर पब्लिक RSA कुंजी (सर्टिफिकेट) का उपयोग करके SSH प्रमाणीकरण कॉन्फ़िगर किया है। अब आप इस प्रमाणीकरण विधि का उपयोग रिमोट सर्वर को सुरक्षित रूप से एक्सेस करने, SSH टनल में पोर्ट स्वचालित रूप से फॉरवर्ड करने, स्क्रिप्ट चलाने और किसी भी अन्य ऑटोमेशन-संबंधी कार्यों को करने के लिए कर सकते हैं।