بروتوكول الشل الآمن (SSH) ومشروع OpenSSH موجودان منذ عقود على لينكس. ولكن OpenSSH على نظام التشغيل ويندوز لم يحظ بتبني في عالم ويندوز حتى وقت قريب. وبالتالي ، لا يأتي نظام ويندوز سيرفر جاهزًا للاستخدام ويتطلب بعض الإعدادات.
في هذا البرنامج التعليمي ، ستتعلم كيفية الاتصال بخادم ويندوز الخاص بك باستخدام بروتوكول SSH بسهولة تامة مثل لينكس. ستتعلم كيفية تثبيت (أو تحديث) OpenSSH على نظام التشغيل ويندوز ، وإضافة قواعد الجدار الناري المناسبة ، وتكوين مصادقة المفتاح العام وكلمة المرور والشهادة.
المتطلبات الأساسية
لمتابعة الأمثلة والعروض التوضيحية في هذه المقالة بشكل فعال ، ستحتاج إلى استيفاء المتطلبات التالية.
- A Windows Server machine – This article will use Windows Server 2019 Datacenter. The server this tutorial will use will have a user account called june and will connect to the server at the IP address of 40.117.77.227 with a hostname of ataWindows.
- A local computer with PowerShell 7.1 installed. PowerShell 7.1 is available in Windows, Linux, and macOS. The examples in this article use PowerShell 7.1 in Windows 10.
تنزيل OpenSSH
على عكس خوادم لينكس ، لا تحتوي خوادم ويندوز على خادم SSH المثبت مسبقًا. ولكن مايكروسوفت قد أطلقت نسخة مفتوحة المصدر من OpenSSH لنظام التشغيل ويندوز. من خلال هذا الإصدار ، يمكنك الآن إعداد خادم SSH على جهاز ويندوز.
للبدء ، ستحتاج أولاً إلى تنزيل OpenSSH. للقيام بذلك ، اتبع الخطوات التالية:
- قم بالاتصال بسطح المكتب على خادم ويندوز باستخدام سطح المكتب البعيد (RDP) أو أي برنامج إدارة سطح المكتب الآخر الذي تفضله.
2. على سطح مكتب خادم Windows الخاص بك ، افتح نافذة Windows PowerShell المرتفعة.
3. بعد ذلك ، قم بنسخ الشفرة أدناه ، والصقها في نافذة PowerShell ، ثم اضغط على Enter. سيقوم هذا النص بتنزيل أحدث إصدار لـ OpenSSH ، والذي هو v8.1.0.0p1-Beta حتى تاريخ كتابة هذا النص ، إلى دليل العمل الحالي.
إذا كنت ترغب في حفظ شفرة PowerShell لتنزيل OpenSSH ، يمكنك أيضًا فتح محرر شفرة مثل Windows PowerShell ISE أو Visual Studio Code وحفظها هناك.
4. يجب أن يكون ملف OpenSSH-Win64.zip الآن في دليل العمل الحالي الخاص بك. تحقق من ذلك عن طريق تشغيل الأمر أدناه.
كما يمكنك رؤية أدناه ، يوجد ملف OpenSSH-Win64.zip في الدليل.

تثبيت OpenSSH
بعد تنزيل OpenSSH-Win64.zip ، يأتي الخطوة التالية وهي تثبيت OpenSSH على الخادم. لا يوجد معالج تثبيت في حال كنت تتوقع ذلك.
- بينما لا تزال في نفس جلسة PowerShell، قم بنسخ الكود أدناه وتشغيله في PowerShell. يستخرج هذا الكود محتويات ملف OpenSSH-Win64.zip إلى C:\Program Files\OpenSSH.
2. بعد استخراج ملف ZIP، قم بتشغيل الأمر أدناه في PowerShell لتنفيذ السكربت C:\Program Files\OpenSSH\install-sshd.ps1. يقوم هذا السكربت بتثبيت خدمة خادم OpenSSH SSH (sshd) وخدمة وكيل مصادقة OpenSSH (sshd-agent).
يمكنك رؤية النتيجة المتوقعة أدناه.

لضمان بدء تشغيل خادم SSH تلقائيًا، قم بتشغيل الأمر أدناه في PowerShell.
إضافة قاعدة جدار الحماية الخاص بنظام Windows للسماح بحركة مرور SSH
ينطبق هذا الإجراء فقط إذا كان خادم Windows الخاص بك يستخدم جدار حماية Windows. بالنسبة للخوادم التي تستخدم جدران حماية من جهات خارجية، راجع وثائق جدار الحماية الخاص بك حول كيفية السماح بالمنفذ 22.
تثبيت OpenSSH لا يُنشئ تلقائيًا قاعدة استثناء في جدار الحماية للسماح بحركة المرور عبر SSH. لذلك، مهمتك التالية هي إنشاء قاعدة جدار الحماية يدويًا.
أحد أسهل الطرق لإنشاء قاعدة جدار حماية جديدة في ويندوز هو باستخدام PowerShell و cmdlet New-NetFirewallRule
. الأمر أدناه يقوم بإنشاء قاعدة جدار حماية تسمى Allow SSH تسمح بجميع حركة المرور الواردة عبر TCP المتجهة إلى المنفذ 22.
انسخ الأمر أدناه وقم بتشغيله في PowerShell.
تظهر الشاشة أدناه الإخراج المتوقع في PowerShell بعد إنشاء قاعدة جدار الحماية.

الاتصال بـ SSH باستخدام المصادقة بواسطة كلمة المرور
في هذه اللحظة، لقد قمت بتثبيت OpenSSH على ويندوز وقمت بأداء الضبط الأولي للخادم. الخطوة التالية هي اختبار ما إذا كان الاتصال عبر SSH يعمل فعلاً.
للاختبار الخادم SSH الذي قمت بتكوينه حديثًا، دعنا نقوم الآن بتشغيل أمر ssh
على جهاز الكمبيوتر المحلي الخاص بك.
تنطبق الخطوات نفسها في هذا القسم أيضًا عند الاتصال بخادم SSH لينكس.
1. من جهاز الكمبيوتر المحلي هذه المرة، افتح PowerShell.
2. فيما بعد، قم بتشغيل الأمر أدناه لبدء عملية تسجيل الدخول عبر SSH. تأكد من تغيير اسم المستخدم والخادم البعيد لخادم ويندوز الخاص بك.
3. منذ أن تقوم بالاتصال لأول مرة بالخادم، سترى رسالة تقول إن لم يتم تأكيد مصداقية المضيف. تعني الرسالة أن جهاز الكمبيوتر الخاص بك لا يعترف بالمضيف عن بعد بعد. اكتب نعم واضغط على Enter للمتابعة.
4. عندما يطلب منك كلمة المرور، اكتب كلمة مرور حسابك واضغط على Enter.

5. بعد تسجيل الدخول، كما يمكنك رؤية في لقطة الشاشة أدناه، ستصل إلى موجه أوامر المضيف عن بعد. افترض أنك ترغب في تأكيد أنك قمت بدخول الجلسة على المضيف عن بعد. للقيام بذلك، اكتب hostname
، واضغط على Enter. يجب أن تعيد الأمر اسم الكمبيوتر عن بعد.

تغيير القيمة الافتراضية للشل لبرنامج OpenSSH إلى PowerShell
عند تسجيل الدخول لأول مرة إلى خادم SSH الخاص بك في نظام Windows، ستلاحظ أن الشل الافتراضي أو المفسر الأمري هو CMD. يمكن أن يكون وجود CMD كشل SSH الافتراضي مقبولًا، ولكن إذا كنت تفضل استخدام PowerShell بدلاً من ذلك، فاتبع هذه الخطوات.
لتغيير الشل الافتراضي لـ OpenSSH من CMD إلى PowerShell:
أولاً، افتح نافذة PowerShell مرفوعة المستوى على خادم Windows الخاص بك، إذا لم يكن لديك واحدة مفتوحة بالفعل.
ثم، قم بإنشاء قيمة سلسلة سجل جديدة تسمى DefaultShell في مفتاح التسجيل HKLM:\SOFTWARE\OpenSSH. قم بتعيين بيانات السلسلة DefaultShell إلى مسار PowerShell في Windows C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
توضح اللقطة الشاشة المتوقعة للأمر.

تكوين المصادقة بالمفتاح العمومي
في الأقسام السابقة، قمت بالاتصال بالخادم باستخدام اسم مستخدم وكلمة مرور. هذا يعمل، ولكن الطريقة الأكثر أمانًا للمصادقة مع خادم SSH هي باستخدام زوج مفاتيح.
باختصار، يتكون زوج المفاتيح من مفتاحين يُسمى الأول مفتاح عمومي و مفتاح خاص, واللذان يشكلان مجموعة من بيانات المصادقة لإثبات هويتك.
يتم تخزين المفتاح العمومي على الخادم، بينما يبقى المفتاح الخاص على الحاسوب المحلي. يجب عليك معاملة المفتاح الخاص مثل كلمة المرور الخاصة بك. إذا تعرض المفتاح الخاص للاختراق، يمكن لأي شخص استخدامه للوصول إلى خادم SSH الخاص بك.
تحضير ملف administrators_authorized_keys
يجب أن تكون مفاتيح العامة على الخادم. ولكن أين؟ بالنسبة لـ OpenSSH على نظام Windows، يقوم خادم SSH بقراءة المفاتيح العامة من ملف C:\ProgramData\ssh\administrators_authorized_keys. ولكن هذا الملف لا يوجد افتراضيًا. يجب عليك إنشاء واحد أولاً.
اتبع هذه الخطوات أدناه لإنشاء ملف administrators_authorized_keys وتعيين القائمة السيطرية على الوصول (ACL) الصحيحة له.
على خادم Windows:
1. افتح نافذة PowerShell كمسؤول إذا لم تكن مفتوحة بالفعل.
2. انسخ الأمر أدناه وقم بتشغيله في PowerShell. يقوم هذا الأمر بإنشاء ملف administrators_authorized_keys باستخدام New-Item
cmdlet.
يجب أن ترى نتيجة مماثلة للتقاط الشاشة أدناه.

3. بعد ذلك، احصل على قائمة السيطرة على الوصول (ACL) المخصصة حاليًا لملف ssh_host_dsa_key وانسخ تلك ACL إلى ملف administrators_authorized_keys. للقيام بذلك، قم بتشغيل الأمر أدناه.
يتطلب خدمة OpenSSH أن يكون لدى مجموعة المسؤولين وحساب SYSTEM فقط الوصول إلى ملف administrators_authorized_keys. ولأن نسخ ACL من ssh_host_dsa_key إلى administrators_authorized_keys له معنى لأن ACL مُعين بالفعل.
4. الآن افتح مستكشف Windows.
5. انتقل إلى مجلد C:\ProgramData\ssh\.
6. انقر بزر الماوس الأيمن على ملف administrators_authorized_keys وانقر على الخصائص.
7. في صفحة الخصائص، انقر على علامة الأمان وانقر على متقدم.

8. ثم، تأكد مما إذا كانت الأذونات كما هو موضح في الصورة أدناه.

إنشاء زوج مفاتيح SSH جديد
لإنشاء زوج مفاتيح SSH جديد، استخدم أمر ssh-keygen
، الذي يعتبر جزءًا من أدوات العميل OpenSSH المضمنة في Windows 10 (وما فوق) ومعظم أنظمة التشغيل Linux.
المثال المعروض في هذا القسم يعمل على كل من أجهزة الكمبيوتر بنظامي التشغيل Windows و Linux.
على جهاز الكمبيوتر المحلي الخاص بك، في نافذة PowerShell:
1. انتقل إلى مجلد .ssh في مجلد المنزل الخاص بك باستخدام الأمر التالي.
٢. بعد ذلك، اكتب الأمر ssh-keygen
واضغط على Enter. عندما يُطلب منك إدخال موقع الملف لحفظ المفتاح الذي تقوم بإنشائه، قم بالاحتفاظ بالموقع الافتراضي واضغط على Enter. بذلك، يمكن لعميل SSH الخاص بك العثور على مفاتيح SSH الخاصة بك عند المصادقة تلقائيًا.
في نظام Windows، يكون ملف المفتاح الافتراضي في C:\Users\<اسم المستخدم>\.ssh\id_rsa.
٣. في البادئة التالية، اترك العبارة السرية فارغة. في هذه المرحلة، لا داعي لاستخدام عبارة سرية للتجربة.
إضافة عبارة سرية إلى المفتاح الخاص يزيد من أمانه بشكل كبير. تعمل العبارة السرية كطريقة للمصادقة الثنائية العاملة (2FA) للمفتاح الخاص بك.
ستلاحظ أن الأمر قام بإنشاء ملفين؛ id_rsa (المفتاح الخاص) و id_rsa.pub (المفتاح العام).

نشر المفتاح العام إلى خادم SSH على نظام Windows
الآن بعد أن قمت بإنشاء زوج المفاتيح الخاصة-العامة الخاص بك، الخطوة التالية هي نسخ المفتاح العام إلى ملف C:\ProgramData\ssh\administrators_authorized_keys على خادم SSH.
على جهاز الكمبيوتر المحلي الخاص بك، في نافذة PowerShell:
١. انسخ الكود أدناه وقم بتشغيله في PowerShell. تأكد من تغيير اسم المستخدم وعنوان IP أولاً. يمكنك الرجوع إلى التعليق أعلاه كل أمر لمعرفة ماذا يفعل كل أمر.
2. أدخل كلمة المرور الخاصة بك عند الطلب، وسيقوم SSH بنسخ المفتاح العام. سترى نتيجة مماثلة كما هو موضح أدناه.

الاتصال بـ SSH باستخدام المصادقة بالمفتاح العام
الآن بعد أن قمت بنسخ مفتاحك العام إلى خادم SSH الخاص بك، لم تعد بحاجة إلى استخدام كلمة مرور للمصادقة. كما يمكنك رؤية أدناه، لم يطلب ssh كلمة مرور.

تكوين المصادقة بالشهادة
مثل المصادقة بالمفتاح العام، المصادقة بالشهادة ليست تحتاج إلى كلمة مرور أو تحتاج إلى كلمة مرور. لتمكين تسجيل الدخول بالشهادة، اتبع نفس الإجراء لإنشاء زوج مفاتيح باستثناء نشر المفتاح العام إلى خادم SSH.
لا تحتاج إلى تعيين المفتاح العام إلى ملفات authorized_keys أو administrators_authorized_keys على خادم SSH. بدلاً من ذلك، يتم توقيع المفتاح العام باستخدام مفتاح سلطة الشهادات (CA).
إنشاء مفتاح سلطة الشهادات (CA)
إن إنشاء مفاتيح CA للتوقيع مشابه لإنشاء زوج مفاتيح مستخدم قمت به في وقت سابق في هذه المقالة. لكن هذه المرة، ستحتاج فقط إلى تحديد اسم ملف لمفاتيح CA الجديدة. للقيام بذلك، على خادم Windows الخاص بك في وحدة تحكم PowerShell:
تنفيذ الأمر ssh-keygen
كما هو موضح أدناه. ينشئ هذا الأمر مفتاح CA في C:\ProgramData\ssh\ca_userkeys، ولكن لا تتردد في استخدام اسم ملف مختلف. استخدام اسم ملف مختلف لن يؤثر على وظيفة مفتاح CA.
عندما يُطلب منك كلمة مرور، اترك الكلمة المرور فارغة واضغط على Enter.
يمكنك أن ترى أدناه أن الأمر أنشأ ملفين. ca_userkeys، وهو المفتاح الخاص، و ca_userkeys.pub، وهو المفتاح العام.

الآن بعد أن قمت بتوليد مفاتيح CA، قل لخادم SSH أن يثق في CA وأين يجد مفتاح CA. للقيام بذلك، أضف سطرًا جديدًا TrustedUserCAKeys path/to/ca_userkeys.pub
إلى ملف C:\ProgramData\ssh\sshd_config على الخادم.
قم بتشغيل الأوامر أدناه لإلحاق عنصر التكوين في ملف sshd_config.
توقيع مفتاح المستخدم العام
في هذه النقطة، قمت بتوليد مفاتيح CA وتكوين خادم SSH للثقة في ملف مفتاح CA العام. الأمر المتبقي الآن هو توقيع مفتاح المستخدم العام الخاص بك.
على جهاز الكمبيوتر المحلي، في نافذة PowerShell:
1. انسخ ملف id_rsa.pub
إلى محرك الأقراص الرئيسي على خادم SSH باستخدام الأمر SCP. تأكد من تغيير اسم المستخدم وعنوان IP إلى القيم الصحيحة.
2. قم بتسجيل الدخول إلى خادم Windows الخاص بك باستخدام SSH. بمجرد تسجيل الدخول ، قم بتشغيل ssh-keygen
لتوقيع مفتاح المستخدم العام. ستلاحظ أن الأمر أدناه استخدم العديد من المعلمات. دعونا نقسمها.
-s C:\ProgramData\ssh\ca_userkeys
– حدد موقع مفتاح السلطة الشهادات لتوقيع المفتاح العام. في هذا المثال ، مفتاح السلطة الشهادات هو الذي قمت بتوليده.-I id_username
– حدد الهوية التي تريد تعيينها لمفتاح المستخدم العام الموقع. قم بتغيير قيمةid_username
إلى أي اسم تريده.-V +4w
– تحدد هذه المعلمة الفترة الصالحة للمفتاح الموقع. في هذا المثال ،+4w
يعني أن مفتاح المستخدم الموقع سيكون صالحًا لمدة أربعة أسابيع. يمكنك تغيير هذه القيمة وفقًا للفترة الصالحة المفضلة لديك.-n username
– هذا هو اسم المستخدم الذي سيمتلك المفتاح العام الموقع.<path to id_rsa.pub>
– هذا هو موقع مفتاح المستخدم العام لتوقيعه (نظام التشغيل Windows).
بعد تشغيل الأمر في جلسة SSH الخاصة بك ، يجب أن تحصل على إخراج مماثل ، كما هو موضح أدناه. كما يمكن رؤية أن الأمر قد أنشأ ملفًا جديدًا يسمى id_rsa-cert.pub ، وهو شهادة المستخدم الموقع.

3. الآن ، انتقل إلى جلسة PowerShell على جهاز الكمبيوتر المحلي الخاص بك وانسخ ملف id_rsa-cert.pub من الخادم إلى جهاز الكمبيوتر المحلي الخاص بك. قم بتغيير اسم المستخدم وعنوان IP إلى القيم الصحيحة أولاً قبل تشغيل الأمر.
بعد اكتمال النسخ ، ستجد شهادة المستخدم الموقع في مجلد الصفحة الرئيسية الخاص بك ، كما هو موضح أدناه.

الاتصال بـ SSH باستخدام مصادقة الشهادة
لقد قمت بتكوين مصادقة الشهادة، والآن لديك شهادة المستخدم. يجب عليك الآن اختبار ما إذا كنت قادرًا على الاتصال بخادم SSH باستخدام مصادقة الشهادة.
الأمر للاتصال بـ SSH باستخدام الشهادة هو نفسه كما لو كنت تستخدم كلمة مرور أو مفتاح عام. ولكن إذا كنت قد قمت بتمكين مصادقة المفتاح العام سابقًا، فيجب تعطيلها أولا. وإلا، ستستمر SSH في استخدام زوج المفاتيح الخاص بك بدلاً من الشهادة الخاصة بك.
لتعطيل زوج المفاتيح الخاص بك، قم بإزالة المفتاح العام الخاص بك من ملف administrators_authorized_keys. للقيام بذلك، اتبع هذه الخطوات.
يرجى ملاحظة أن الأوامر التالية ستفرغ ملف administrators_authorized_keys بالكامل، مما يؤدي إلى إزالة جميع المفاتيح العامة المرتبطة. إذا كنت لا ترغب في مسح جميع المفاتيح العامة المرتبطة، يمكنك استخدام محرر نصوص لإزالة المفاتيح العامة المحددة يدويًا من كل ملف.
أثناء الاتصال بخادم Windows:
1. قم بتشغيل الكود التالي في PowerShell لتفريغ ملف administrators_authorized_keys.
2. في هذه المرحلة، يكون ملفي authorized_keys و administrators_authorized_keys فارغين، كما يمكنك رؤية ذلك في لقطة الشاشة أدناه.

3. اكتب exit
واضغط على Enter للانفصال عن جلسة SSH الخاصة بك. ستعود إلى جلسة PowerShell الخاصة بك.
4. بعد إزالة المفاتيح العامة، ستقوم بمحاولة تسجيل الدخول القادمة باستخدام مصادقة الشهادة. ستكون تجربة تسجيل الدخول مشابهة لمصادقة المفتاح العام.

الختام
لقد قمت الآن بإعداد خادم OpenSSH على نظام Windows من البداية حتى استكشاف وإعداد وسائل المصادقة المختلفة. يمكنك الآن الاتصال بخوادم Windows الخاصة بك بالطريقة نفسها تمامًا كما تفعل مع Linux!