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

طرق التثبيت:
- يدويا
- عبر حزمة Chocolatey
- عبر Ansible ، دعنا نقول الدور jborean93.win_openssh
سأشرح الطريقة اليدوية لأن بعضها الآخر واضح.
يجب أن أشير إلى أن هذا المشروع في مرحلة تجريبية ولا ينصح باستخدامه في الإنتاج.
حسنًا ، لنقم بتنزيل أحدث إصدار. حاليا هو
7.9.0.0p1 بيتا . كما أن لديها 32 و 64 بت الإصدارات.
ثم فكه إلى
C: \ Program Files \ OpenSSH .
هام: من الضروري منح حق الوصول للكتابة إلى مجموعة
SYSTEM و Administrators فقط.
علاوة على ذلك ، قم بتثبيت الخدمات عبر shell script
install-sshd.ps1 الموجود في دليل OpenSSH
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 داخل دليل المستخدم (
C: \ Users \ <user_directory> )
وملف _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-tunnel ، ثم RDP عبر النفق. يا يقتلني حبيبي مرة أخرى. - سهلة التكوين
أعتقد أنه واضح. - سرعة الاتصال إلى المضيف البعيد
بدون واجهة المستخدم الرسومية ، نقوم بحفظ موارد المضيف وحجم البيانات المرسلة
سلبيات:
- لا يمكن أن تحل محل RDP في بعض الحالات.
ليس كل الأشياء التي يمكنك القيام بها عبر PowerShell. أعني الحالات التي تكون فيها واجهة المستخدم الرسومية مطلوبة.
الروابط:
مشروع على جيثبمستندات Ansible