يأتي Windows Server 2022 مع OpenSSH Server كميزة اختيارية: لا مثبّت من طرف ثالث، والتحديثات عبر Windows Update. بعد تفعيله يمكنك تشغيل PowerShell عبر SSH، ونسخ الملفات بـ scp، وتوجيه السكربتات أو CI إلى الخادم كأي جهاز Linux.
نفّذنا كل ما يلي على صورة Windows Server 2022 لدينا، في PowerShell بصلاحيات المسؤول عبر RDP (كيف تتصل).
أولاً الشبكة. في خطة Windows مع NAT يذهب التحويل الوارد الوحيد إلى 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.
التعليقات
لا تعليقات بعد. كن الأول.