−25%

Windows کی سالانہ ادائیگی پر، 31 اکتوبر تک۔ پلانز دیکھیں

EQVPS
شروع کریں

Windows Server 2022 پر OpenSSH Server کیسے انسٹال کریں (کلید سے لاگ ان، PowerShell شیل)

Windows Server 2022 VPS پر بلٹ ان OpenSSH Server انسٹال کریں، PowerShell کو ڈیفالٹ شیل بنائیں، Administrator کے طور پر کلید سے لاگ ان کریں اور پاس ورڈ لاگ ان بند کریں۔ ساتھ میں Windows کے وہ دو جال جن سے کلید والا لاگ ان ناکام ہوتا ہے۔

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 چلائیں۔

عمومی سوالات

جب RDP موجود ہے تو Windows پر SSH کیوں؟

اسکرپٹس اور ٹولز SSH پر بات کرتے ہیں۔ سرور پر OpenSSH ہو تو آپ Linux مشین یا CI جاب سے PowerShell کمانڈز چلاتے ہیں، scp سے فائلیں کاپی کرتے ہیں اور آٹومیشن کو ڈیسک ٹاپ سیشن کے بغیر سرور سنبھالنے دیتے ہیں۔

میری کلید عام صارف کے لیے چلتی ہے مگر Administrator کے لیے نہیں۔ کیوں؟

Administrators گروپ کے ارکان کے لیے Windows کا OpenSSH فائل ~/.ssh/authorized_keys کو نظر انداز کرتا ہے اور C:\ProgramData\ssh\administrators_authorized_keys پڑھتا ہے۔ اس فائل میں صرف Administrators اور SYSTEM لکھ سکیں، ورنہ sshd اسے خاموشی سے چھوڑ دیتا ہے۔

کیا NAT والے Windows پلان پر SSH تک پہنچ سکتا ہوں؟

باہر سے نہیں۔ NAT والے Windows پلان پر ذاتی بیرونی پورٹ RDP (3389) پر فارورڈ ہے، اور یہی واحد آنے والا فارورڈ ہے۔ انٹرنیٹ سے SSH کے لیے اپنے IPv4 والا Windows پلان لیں۔ سرور کے اندر OpenSSH مقامی ٹولز کے لیے پھر بھی کام کرتا ہے۔

Windows Server 2022 کون سا OpenSSH ورژن انسٹال کرتا ہے؟

OpenSSH 8.1p1 for Windows۔ اسی لیے پاس ورڈ کی سیٹنگز میں نئے نام KbdInteractiveAuthentication کی جگہ ChallengeResponseAuthentication استعمال ہوتا ہے۔

تبصرے

ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔

ایک تبصرہ چھوڑیں

تبصرے ظاہر ہونے سے پہلے moderate کیے جاتے ہیں۔