واحدة من الأمور الرائعة في كيفية تطور PowerShell على مر السنوات القليلة الماضية هو أنها تعتمد على العديد من الطرق للتفاعل مع أجهزة غير ويندوز. كانت إحدى هذه التغييرات هي دعم PSRemoting عبر SSH. PSRemoting عبر SSH يعني أيضًا وجود PSRemoting على Linux!
على الرغم من أن إعداد PSRemoting للعمل مع SSH و Linux يتطلب بعض الإعداد للعمل، يتيح لك ذلك استخدام PowerShell للتفاعل مع أجهزة Linux بشكل طبيعي.
في هذا البرنامج التعليمي، ستتعلم كيفية إعداد عميل Windows للاتصال بجهاز كمبيوتر Linux (CentOS) باستخدام PSRemoting عبر SSH والعكس. ستتعلم كيفية المصادقة باستخدام كلمة مرور و باستخدام شهادة.
ذات الصلة: PowerShell Remoting: The Ultimate Guide
المتطلبات الأولية
سيكون هذا البرنامج التعليمي خطوة بخطوة. إذا كنت ترغب في متابعته، يرجى التأكد من وجود ما يلي مسبقًا:
- A Windows 10 build 1809 or greater machine. The tutorial will use Windows Server 2019 Standard as the remote server.
- A Linux machine that supports PowerShell 7. The tutorial will use CentOS 8.
- صلاحيات Sudo على جهاز Linux وصلاحيات المسؤول المحلي على جهاز Windows. بعد الإعداد الأولي، يمكن سحب بعض الصلاحيات.
إعداد Windows (العميل) لـ PSRemoting عبر SSH
أولاً، تحتاج إلى تكوين عميل PSRemoting (PowerShell) على جهاز Windows الخاص بك. للقيام بذلك، ستحتاج إلى إعداد وتكوين كل من PowerShell 7+ وOpenSSH.
تثبيت PowerShell 7+
أولاً، قم بتثبيت PowerShell 7+. لن يتناول هذا البرنامج التعليمي كيفية القيام بذلك. لمعرفة كيفية القيام بذلك، تحقق من الرابط أدناه.
تثبيت OpenSSH
سيكون عليك أيضًا تثبيت OpenSSH. OpenSSH هو الحزمة التي سيستخدمها PSRemoting للاتصال بجهاز الكمبيوتر اللينكس البعيد. يمكنك تثبيت OpenSSH عبر PowerShell باستخدام cmdlet Get-WindowsCapability
كما هو موضح أدناه.
اعتمادًا على ما إذا كنت تنوي جهاز Windows الخاص بك أن يكون عميلًا و/أو خادمًا يعتمد على الخاصية التي يجب عليك تثبيتها. إذا كنت تقوم بالاتصال من خادم Windows إلى لينكس، فستحتاج فقط إلى عميل OpenSSH. إذا كنت تقوم بالاتصال من لينكس إلى خادم Windows، فستحتاج فقط إلى خادم OpenSSH.
يقوم الأمر أدناه بالعثور على جميع ميزات Windows بأسماء تبدأ بـ OpenSSH وتثبيتها، لذا سيقوم بتثبيت كل من العميل والخادم.
إذا كنت ترغب في تثبيت العميل فقط، قم بتغيير الفلتر في كتلة النص البرمجي
Where-Object
إلىOpenSSH.Client*
وبالنسبة للخادم، يجب أن يكون الفلترOpenSSH.Server*
.
ذات صلة: البدء باستخدام SSH وPowerShell
بدء تشغيل خادم SSH
بمجرد تثبيت OpenSSH، سيفتح جدار الحماية في Windows على منفذ 22، ولكنه لن يبدأ خدمة خادم OpenSSH في الاستماع على المنفذ. لتشغيل خادم OpenSSH على خادم Windows، قم بتشغيل الأمر التالي في PowerShell لبدء خادم OpenSSH وتعيين الخدمة للبدء مع تشغيل النظام.
تكوين تكوين OpenSSH
الخطوة التالية هي تعديل ملف تكوين الخدمة sshd_config. داخل هذا الملف، يجب عليك أولاً التأكد من تمكين مصادقة كلمة المرور وأيضًا إضافة نظام PowerShell الفرعي.
جزء هذا البرنامج التعليمي هو إعداد أسهل طريقة باستخدام كلمات المرور. ستتعلم كيفية إعداد مصادقة SSH باستخدام الشهادات لاحقًا في هذا البرنامج التعليمي.
- افتح ملف التكوين في محرر النص المفضل لديك في المسار C:\ProgramData\ssh\sshd_config.
2. قم بالتأكيد على تمكين مصادقة كلمة المرور، حيث يتم تعليق سطر PasswordAuthentication بوضع علامة التعليق #
في البداية أو يتم تعيينه إلى yes
.

3. إضافة نظام PowerShell الفرعي. لـ PowerShell 7، أضف السطر: Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
.
- الخيار
-sshs
يستخدم للسماح لـ PowerShell 7 بالتشغيل داخل SSH كنظام فرعي. - الخيار
-NoLogo
يجعل PowerShell يخفي معلومات حقوق الطبع عند بدء التشغيل لضمان عدم وجود إخراج غير متوقع عند بدء جلسة SSH.
4. احفظ وأغلق ملف التكوين.
5. أعد تشغيل خدمة sshd في Windows. يمكنك القيام بذلك باستخدام PowerShell عن طريق تشغيل Restart-Service sshd
.
يجب أن تكون الآن قد قمت بتكوين كل ما تحتاجه للاتصال من (العميل) وإلى (الخادم) هذا الخادم Windows باستخدام PSRemoting عبر SSH.
تهيئة نظام Linux (الخادم) لـ PSRemoting عبر SSH
الخطوة التالية هي إعداد Linux بتكوين مماثل؛ تثبيت PowerShell وتكوين OpenSSH.
يرجى ملاحظة أنه نظرًا لاستخدامنا لنظام CentOS ، قد تكون بعض الأوامر مختلفة إذا كنت تستخدم توزيعًا مختلفًا.
تثبيت PowerShell 7+
أولاً ، قم بتثبيت PowerShell 7. لن يتناول هذا البرنامج التعليمي كيفية القيام بذلك. بدلاً من ذلك ، تأكد من التحقق من الرابط التالي.
ذات الصلة: كيفية تنزيل وتثبيت PowerShell 7 على نظام التشغيل Windows و macOS و Linux
تكوين OpenSSH
مثل نظام Windows Server ، ستحتاج إلى OpenSSH. وعلى عكس Windows ، من المحتمل أن يكون OpenSSH قد تم تثبيته بالفعل. بالنسبة لهذا البرنامج التعليمي الذي يعمل بنظام CentOS 8 ، فإن الآلة الافتراضية لديها بالفعل كل من العميل والخادم مثبتين افتراضيًا ولكن يمكنك التحقق باستخدام الأمر التالي:
إذا كانت العميل والخادم قد تم تثبيتهما ، يجب أن تحصل على شيء مشابه للإخراج أدناه.

تكوين ملف تكوين SSH عن طريق:
- فتح ملف sshd_config عن طريق تشغيل
sudo vi /etc/ssh/sshd_config
.
2. إضافة نظام PowerShell على غرار نظام Windows Server باضافة السطر أدناه إلى ملف التكوين.
3. الخروج من vi وحفظ الملف.
4. إعادة تشغيل خدمة ssh لتطبيق التغييرات عن طريق تشغيل sudo systemctl restart sshd
.
افتراضيًا ، سيتم تمكين المصادقة بواسطة كلمة المرور والمفتاح العام في معظم الحالات بما في ذلك CentOS 8. لا حاجة لإضافتها هنا.
الاتصال بين Windows/Linux بمصادقة كلمة المرور
بمجرد إعداد كل شيء على كل من الأجهزة اللينكسية ونظام التشغيل Windows ، حان الوقت لوضع ذلك العمل الذي قمت به إلى جيد. دعنا نحاول الآن الاتصال من Windows إلى Linux والعكس باستخدام المصادقة بواسطة كلمة المرور.
تبدو مصادقة كلمة المرور مألوفة وتشبه استخدام SSH بالمستخدم وكلمة المرور.
أوامر الاتصال
لاختبار الاتصال بـ PSRemoting عبر SSH من Windows إلى Linux أو من Linux إلى Windows ، دعنا نستخدم جلسة “مؤقتة” باستخدام cmdlet Invoke-Command
وأيضًا جلسة دائمة باستخدام New-PSSession
.
ذات الصلة: Invoke-Command: أفضل طريقة لتشغيل الشفرة عن بعد
اختبار اتصال PSRemoting باستخدام Invoke-Command
عن طريق:
- فتح وحدة التحكم PowerShell 7 الخاصة بك.
2. تحديد المعلمات لـ cmdlet Invoke-Command
. في هذه الحالة ، ستتصل المعلمات أدناه بجهاز يُسمى SRV1 باستخدام حساب مستخدم محلي على SRV1 يسمى User.
3. تشغيل Invoke-Command
عن طريق splatting المعلمات أعلاه وتشغيل الأمر (في هذه الحالة Get-Process
) داخل scriptblock.
ذات صلة: التشغيل الفعّال لـ PowerShell: ما هو وكيف يعمل؟
سترى بعد ذلك قائمة بجميع العمليات الجارية على جهاز الكمبيوتر SRV1.
يمكنك أيضًا إنشاء اتصال دائم يسمح لك بالاتصال إليه ومنه وتشغيل الأوامر تفاعليًا عن طريق:
- توفير المعلمات أعلاه وتمريرها إلى cmdlet
New-PSSession
.
2. الاتصال بتلك الجلسة تفاعليًا باستخدام cmdlet Enter-PSSession
.
3. بعد تشغيل الأمر Enter-PSSession
من أعلاه، ستتم المطالبة بكلمة المرور للمستخدم. بعد المصادقة، ستكون متصلاً بجهاز آخر داخل PowerShell.
لاحظ أن أيًا من الأوامر أعلاه لا تتطلب استخدام المعلمة الشائعة Credential
لتوفير اسم مستخدم وكلمة مرور للاتصال. بدلاً من ذلك، استخدمنا معلمة SSHTransport
. لا تستخدم SSH نفس عملية المصادقة التي يستخدمها Windows للانتقال من كمبيوتر ويندوز إلى آخر، لذا لا يمكنها تفسير كائنات PSCredential.
ذات صلة: استخدام cmdlet Get-Credential
في PowerShell وكل ما يتعلق بالاعتمادات.
من خلال هذا النهج، يمكنك أيضًا الاستفادة من الجلسات المفصولة.
إعداد المصادقة بناءً على المفتاح العام
بينما المصادقة عبر كلمة المرور سهلة الإعداد وسهلة الاستخدام، إلا أنها تواجه مشكلتين.
- لا يوجد طريقة للمصادقة بدون تشغيل الأوامر يدوياً بشكل آمن.
- أنت ترسل كلمة مرور عبر الشبكة.
على الرغم من أن كلمة المرور، في هذه الحالة، مشفرة داخل اتصال SSH، إلا أن الخادم يستلم كلمة المرور بنصٍ عادي. إذا تم اختراق الخادم بطريقة ما، يمكن أن يصبح ذلك مشكلة أمنية.
توليد المفاتيح العمومية/الخاصة
عند استخدام المصادقة بمفتاح عام/خاص من أي نوع، يجب عليك أولاً توليد مفتاح عام من العميل. هذا المتطلب ينطبق على كل من لينكس وويندوز.
على إحدى آلتي خادم لينكس أو ويندوز:
- قم بتشغيل
ssh-keygen
لتوليد زوج المفاتيح.
إذا كنت تستخدم
ssh-keygen
على لينكس، فأعلم أنه سيقوم بتوليد زوج مفاتيح RSA افتراضيًا. العديد من أنظمة التشغيل الجديدة لينكس لن تسمح بالسماح باستخدام أزواج مفاتيح RSA للمصادقة افتراضيًا. لتصحيح هذا الأمر استخدمssh-keygen -t ed25519
.
2. سيُطلب منك تحديد مسار لتخزين المفتاح الخاص وكلمة مرور لتشفير المفتاح الخاص. في حالة رغبتك في عدم الحاجة إلى تقديم كلمة مرور أثناء المصادقة، يمكنك ترك كلمة المرور فارغة.
3. فقط لويندوز: قم بتشغيل الأوامر التالية من PowerShell حيث <ProfilePath>
هو المسار إلى ملف التعريف الخاص بك (ربما C:\Users\UserName).
تحتوي تنفيذات Windows لبروتوكول OpenSSH على خدمة ssh-agent تسمح لك بتخزين المفاتيح الخاصة ضمن سياق أمان Windows للمستخدم الذي قمت بتسجيل الدخول به. سيمكنك ذلك من استيراد مفتاح SSH الخاص الخاص بك إلى ssh-agent ثم حذف المفتاح من نظام الملفات لتأمينه بشكل أكبر.
4. الآن، قم بنسخ المفتاح العام المولد (<مجلد المستخدم الرئيسي>\.ssh\id_ed25519.pub) إلى الخادم الذي تنوي الاتصال به. لا تقدم Windows أداة للقيام بذلك، لذا يمكن إكمال العملية باستخدام SCP. قم بتشغيل الأمر أدناه لنسخ المفتاح العام إلى جهاز Linux.
للنسخ من Linux إلى Windows:
5. أدخل كلمة مرور المستخدم الذي قام بتسجيل الدخول. بمجرد إدخالها، سيقوم PowerShell/Bash بنسخ المفتاح وستتم فصلك عن الجهاز البعيد.
الاتصال إلى/من Windows/Linux باستخدام المصادقة بمفتاح عام
بمجرد إعداد المفاتيح العامة والخاصة، يجب أن يكون الاتصال إلى/من Windows و Linux سهلاً. إنه مطابق تمامًا للمصادقة على أساس كلمة المرور.
للاتصال بمفتاح عام على Windows، استخدم الأوامر المتطابقة كما هو موضح في أوامر الاتصال أعلاه. ستلاحظ فقط فارقًا واحدًا؛ لن يتم طلب اعتمادات.
فيما يلي مثال على الاتصال من Linux إلى Windows باستخدام مفتاح -v
لرؤية ما يحدث أثناء الاتصال.

-v
switch