كنت دائمًا مكتئبًا بسبب الاتصال بأجهزة Windows. لا ، أنا لست معارضا أو مؤيدا لمايكروسوفت ومنتجاتها. كل منتج موجود لغرضه ، ولكن هذا ليس عن ذلك.
لقد كان الأمر مؤلمًا دائمًا بالنسبة لي للاتصال بخوادم Windows ، لأن هذه الاتصالات إما تم تكوينها من خلال مكان واحد (مرحبًا WinRM مع HTTPS) أو لا تعمل بثبات شديد (مرحبًا RDP إلى الأجهزة الافتراضية في الخارج).
لذلك ، تعثرت بطريق الخطأ على مشروع 
Win32-OpenSSH ، قررت لتبادل تجربة التكوين. ربما شخص ما هذه الأداة حفظ مجموعة من الأعصاب.

خيارات التثبيت:
- يدويا
- عن طريق حزمة الشوكولاتة
- عبر Ansible ، على سبيل المثال دور jborean93.win_openssh
بعد ذلك ، سأتحدث عن النقطة الأولى ، كما هو الحال مع البقية ، وبالتالي فإن كل شيء أكثر أوضح.
ألاحظ أن هذا المشروع لا يزال في مرحلة تجريبية ، لذلك لا يوصى باستخدامه في الإنتاج.
لذلك ، قم بتنزيل أحدث إصدار ، حاليًا هو 
7.9.0.0p1-beta . هناك إصدارات لكل من أنظمة 32 و 64 بت.
فك في 
C: \ ملفات البرنامج \ OpenSSHاللحظة الإلزامية للعمل الصحيح: يجب أن يكون لدى 
SYSTEM ومجموعة المسؤول أذونات الكتابة فقط في هذا الدليل.
قم بتثبيت الخدمات باستخدام 
البرنامج النصي install-sshd.ps1 الموجود في هذا الدليل
powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1 
السماح بالاتصالات الواردة إلى المنفذ 22:
 New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 
توضيح: 
يتم استخدام 
التطبيق الصغير New-NetFirewallRule على Windows Server 2012 والإصدارات الأحدث. في أقدم النظم (أو سطح المكتب) ، يمكنك استخدام الأمر:
 netsh advfirewall firewall add rule name=sshd dir=in action=allow protocol=TCP localport=22 
نبدأ الخدمة:
 net start sshd 
عند بدء التشغيل ، سيتم إنشاء مفاتيح المضيف (في حالة 
فقدها ) تلقائيًا في 
٪ programdata٪ \ sshتشغيل تلقائي للخدمة عند بدء تشغيل النظام يمكننا تمكين مع الأمر:
 Set-Service sshd -StartupType Automatic 
أيضا ، يمكنك تغيير shell الافتراضي (بعد التثبيت ، الافتراضي هو 
cmd ):
 New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force 
المواصفات: يجب تحديد مسار مطلق.
ما التالي؟
ثم قم بتكوين 
sshd_config ، والذي 
سنضعه في 
C: \ ProgramData \ ssh . على سبيل المثال:
 PasswordAuthentication no PubkeyAuthentication yes 
وقم بإنشاء دليل 
.ssh في مجلد المستخدم ، 
وفيه ملف 
Author_keys . نكتب المفاتيح العامة هناك.
توضيح مهم: يجب أن يكون لدى المستخدم في ملفه الدليل فقط أذونات الكتابة لهذا الملف.
ولكن إذا كنت تواجه مشكلات في ذلك ، فيمكنك دائمًا إيقاف تشغيل التحقق من الحقوق في التكوين:
 StrictModes no 
بالمناسبة ، يوجد في 
البرنامجين C: \ Program Files \ OpenSSH نصان ( 
FixHostFilePermissions.ps1 ، 
FixUserFilePermissions.ps1 ) ، 
ولكن يجب أن 
يكونا غير مطلوبين لإصلاح الحقوق ، بما في ذلك مع 
مفاتيح Author_keys ، لكن لسبب ما لن يتم إصلاحها.
تذكر إعادة تشغيل خدمة 
sshd بعد تطبيق التغييرات.
 ru-mbp-666:infrastructure$ ssh Administrator@192.168.1.10 -i ~/.ssh/id_rsa Windows PowerShell Copyright (C) 2016 Microsoft Corporation. All rights reserved. PS C:\Users\Administrator> Get-Host Name : ConsoleHost Version : 5.1.14393.2791 InstanceId : 653210bd-6f58-445e-80a0-66f66666f6f6 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : en-US CurrentUICulture : en-US PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace PS C:\Users\Administrator> 
إيجابيات / سلبيات ذاتية.
الايجابيات:
- نهج قياسي للاتصال بالخوادم.
 عندما يكون هناك عدد قليل من أجهزة Windows ، يكون من غير المريح جدًا عندما:
 لذلك ، هنا نذهب عن طريق SSH ، وهنا RDP ،
 وأفضل الممارسات بشكل عام مع الحصون ، أولاً نفق ssh ، ومن خلالها RDP.
- سهل الإعداد
 أعتقد أن هذا واضح.
- سرعة الاتصال والعمل مع جهاز بعيد
 لا يوجد غلاف رسومي ؛ يتم حفظ موارد الخادم وكمية البيانات المنقولة.
سلبيات:
- لا يحل محل RDP تماما.
 ليس كل شيء يمكن القيام به من وحدة التحكم ، للأسف. أعني الحالات التي تتطلب واجهة المستخدم الرسومية.
المواد المستخدمة في المقال:
رابط للمشروع نفسهتم نسخ خيارات التثبيت بدون خجل من 
مستندات Ansible .