Windows Server 2022 में OpenSSH Server एक वैकल्पिक सुविधा के रूप में आता है: कोई तीसरे पक्ष का इंस्टॉलर नहीं, अपडेट Windows Update से। चालू होने पर आप SSH पर PowerShell चला सकते हैं, scp से फ़ाइलें कॉपी कर सकते हैं और स्क्रिप्ट या CI को किसी भी Linux मशीन की तरह सर्वर पर लगा सकते हैं।
नीचे का सब कुछ हमने अपनी Windows Server 2022 इमेज पर, RDP से खोले गए व्यवस्थापक PowerShell में किया (कनेक्ट कैसे करें)।
पहले नेटवर्क। NAT वाले Windows प्लान पर एकमात्र इनबाउंड फ़ॉरवर्ड RDP पर जाता है, इसलिए इंटरनेट से SSH तक नहीं पहुँचा जा सकता। बाहर से SSH के लिए अपने IPv4 वाला प्लान चाहिए, जैसे Windows Small-IP। पोर्ट तक पहुँच हो तो नीचे के चरण लगभग पाँच मिनट लेते हैं।
1. OpenSSH Server इंस्टॉल करें
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
क्लाइंट पहले से इंस्टॉल है; सर्वर जोड़ने तक NotPresent दिखाता है। हमारे सर्वर पर इंस्टॉलेशन में 28 सेकंड लगे।
2. सेवा शुरू करें और बूट पर अपने आप चलने दें
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*
सुविधा इंस्टॉल करते ही फ़ायरवॉल नियम OpenSSH-Server-In-TCP (पोर्ट 22, इनबाउंड, अनुमत) बन जाता है, इसलिए अपना नियम जोड़ने की ज़रूरत नहीं।
3. PowerShell को डिफ़ॉल्ट शेल बनाएँ
डिफ़ॉल्ट रूप से SSH सत्र cmd.exe में खुलता है। PowerShell पर बदलें:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
नए कनेक्शन तुरंत PowerShell 5.1 पाते हैं; रीस्टार्ट की ज़रूरत नहीं।
4. Administrator के लिए कुंजी: वह फ़ाइल जिस पर सब अटकते हैं
यह Windows का पहला जाल है। Administrators समूह के खातों के लिए sshd C:\Users\<name>\.ssh\authorized_keys नहीं पढ़ता। यह एक साझा फ़ाइल C:\ProgramData\ssh\administrators_authorized_keys पढ़ता है, और वह भी तभी जब Administrators और SYSTEM के अलावा कोई उसमें लिख न सके:
$pub = 'ssh-ed25519 AAAA...your-public-key... you@laptop'
Set-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value $pub -Encoding ascii
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
-Encoding ascii भी मायने रखता है। हमारे परीक्षण में वही कुंजी Out-File (UTF-16, PowerShell 5.1 का डिफ़ॉल्ट) से सहेजने पर Permission denied (publickey) के साथ अस्वीकार हुई। अपनी मशीन से:
ssh Administrator@YOUR.SERVER.IP
आपको बिना पासवर्ड के PowerShell प्रॉम्प्ट मिलना चाहिए। गैर-व्यवस्थापक उपयोगकर्ताओं के लिए सामान्य C:\Users\<name>\.ssh\authorized_keys काम करता है।
5. पासवर्ड लॉगिन बंद करें: दूसरा जाल
सीधा बदलाव PasswordAuthentication no इस संस्करण में काफ़ी नहीं है। OpenSSH 8.1 अब भी keyboard-interactive देता है, जो वही Windows पासवर्ड पूछता है। हमारे परीक्षण में बिना कुंजी वाला लॉगिन तब तक keyboard-interactive दिखाता रहा जब तक हमने उसे भी बंद नहीं किया। साथ ही यह सेटिंग फ़ाइल के अंत में Match Group administrators ब्लॉक से पहले होनी चाहिए, वरना यह सिर्फ़ व्यवस्थापकों पर लागू होती है। यह कमांड दोनों पंक्तियाँ सबसे ऊपर रखती है:
$cfg = 'C:\ProgramData\ssh\sshd_config'
$lines = Get-Content $cfg | Where-Object { $_ -notmatch '^#?\s*(PasswordAuthentication|KbdInteractiveAuthentication|ChallengeResponseAuthentication)\s' }
Set-Content $cfg -Value (@('PasswordAuthentication no', 'ChallengeResponseAuthentication no') + $lines) -Encoding ascii
Restart-Service sshd
मौजूदा SSH सत्र खुला रखें और दूसरे टर्मिनल से जाँचें। सिर्फ़ पासवर्ड वाले प्रयास को अब यह मिलना चाहिए:
Permission denied (publickey).
हमारे परीक्षण में Administrator और सामान्य उपयोगकर्ता दोनों के लिए यही नतीजा था, जबकि कुंजी से लॉगिन चलता रहा।
इससे क्या कर सकते हैं
- कहीं से भी कमांड चलाएँ:
ssh Administrator@IP 'Get-Service sshd'। - फ़ाइलें कॉपी करें:
scp .\app.zip Administrator@IP:C:/apps/। - RDP की तरह ही पोर्ट को अपने पते तक सीमित करें:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10।
कौन-सा प्लान
बाहर से SSH के लिए सार्वजनिक IPv4 चाहिए: Windows Small-IP (4 vCPU, 4 GB, 50 GB) $28/महीना है, Windows Medium-IP (6 vCPU, 6 GB) $36/महीना। Windows आपके अपने लाइसेंस के साथ Server 2022 है (BYOL समझें)। चारों प्लान Windows VPS पेज पर हैं। डिस्कनेक्ट के बाद भी प्रोग्राम चलता रहे, इसके लिए देखें Windows Server पर स्क्रिप्ट 24/7 चलाएँ।
टिप्पणियाँ
अभी तक कोई टिप्पणी नहीं। पहले बनें।