PSRemoting למערכות הפעלה Linux ו-Windows: מדריך איך לעשות זאת

אחת הדברים הנהדרים בכך ש-PowerShell שינתה במהלך השנים האחרונות הוא שהיא משתמשת בדרכים רבות להתממשק עם מכונות שאינן מריצות מערכת ההפעלה Windows. אחת מהשינויים האלו היא תמיכה ב-PSRemoting דרך SSH. PSRemoting דרך SSH גם אומרת לך יכולת להשתמש ב-PSRemoting ב-Linux!

בעת הגדרת PSRemoting לעבוד עם SSH ו-Linux יש צורך בהגדרה קטנה כדי להפעיל את התהליך, אך זה מאפשר לך להשתמש ב-PowerShell להתממשק עם מכונות Linux באופן טבעי.

במדריך זה, תלמד כיצד להגדיר לקוח Windows כדי להתחבר למחשב Linux (CentOS) באמצעות PSRemoting דרך SSH ולהיפך. תלמד גם כיצד לאמת באמצעות סיסמה וגם באמצעות תעודת אימות.

קשור: PSRemoting של PowerShell: המדריך הסופי

דרישות מוקדמות

מדריך זה יהיה בצורת מדרכה. אם ברצונך ללמוד, וודא שיש לך את הפריטים הבאים מראש:

  • 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) על המחשב שלך. לכך, יהיה עליך להגדיר ולהגדיר את שני התוכניות, PowerShell 7+ ו-OpenSSH.

התקנת PowerShell 7+

ראשית, התקן את PowerShell 7+. מדריך זה לא יכסה כיצד לעשות זאת. למידע נוסף, ראה את הקישור למטה.

התקנת OpenSSH

תתקין גם את openssh. openssh הוא החבילה שבה psremoting ישתמש כדי להתחבר למחשב הלינוקס המרוחק. אתה יכול להתקין את openssh דרך powershell באמצעות cmdlet של get-windowscapability כפי שמוצג למטה.

בהתאם לכוונתך שהמחשב המארח שלך ב-windows יהיה לקוח ו/או שרת תלוי בתכונת windows שצריך להתקין. אם אתה מתחבר מ-מ-windows server ל-linux, אתה רק צריך את הלקוח של openssh. אם אתה מתחבר מ-linux ל- ל-windows server, אתה רק צריך את השרת של openssh.

הפקודה למטה מוצאת את כל התכונות של windows ששמן מתחיל ב-openssh ומתקינה אותן, כך שהיא תתקין גם את הלקוח וגם את השרת.

Get-WindowsCapability -Online | Where-Object {$_.Name -like 'OpenSSH*'} | Add-WindowsCapability -Online

אם ברצונך להתקין רק את הלקוח, שנה את הסננים בתוך בלוק הסקריפט של where-object ל-openssh.client* ולשרת, הסנן צריך להיות openssh.server*.

קשור: התחלה עם ssh ו-powershell

הפעלת שרת ה-ssh

פעם ש-openssh מותקן, זה יפתח את חומת האש של windows בפורט 22, אך לא יפעיל את שירות השרת של openssh להאזנה בפורט. כדי להעלות את שרת openssh ב-windows server, הפעל את הפקודה הבאה ב-powershell כדי להתחיל את שרת openssh ולהגדיר את השירות להתחיל בעת האתחול.

Start-Service sshd
Set-Service sshd -StartupType Automatic

הגדרת הגדרות openssh

השלב הבא הוא לשנות את קובץ התצורה של השרת (daemon) של `sshd_config` sshd_config daemon configuration file. בתוך קובץ זה, עליך לאמת תחילה שאימות ססמא מאופשר וגם להוסיף את תת-המערכת של PowerShell.

החלק הזה של המדריך מגדיר את השלב הקל ביותר באמצעות השתמשות בסיסמאות. תלמד גם איך להגדיר אימות SSH באמצעות תעודות מאוחר יותר במדריך זה.

  1. פתח את קובץ התצורה בעורך טקסט שאתה אוהב ב־C:\ProgramData\ssh\sshd_config.

2. אמת שאימות ססמא מאופשרת בשורה בה הערה עם # בתחילתה או שהיא מוגדרת ל־yes.

Password Authentication

3. הוסף את תת-המערכת של PowerShell. עבור PowerShell 7, הוסף את השורה: Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo.

  • האופציה -sshs משמשת לאפשר ל-PowerShell 7 לרוץ כתת-מערכת (subsystem) בתוך SSH.
  • האופציה -NoLogo מסתירה את המידע הקפיירייט של PowerShell בהפעלה, מה שוודא שאין פלט חסר צפייה בעת התחלת הסשן של SSH.

4. שמור וסגור את קובץ התצורה.

5. הפעל מחדש את שירות ה־sshd של Windows. ניתן לעשות זאת עם PowerShell תוך הרצת Restart-Service sshd.

עכשיו אתה אמור להגדיר את כל הדברים הנחוצים כדי להתחבר מ- (לקוח) ו־אל (שרת) לשרת Windows זה באמצעות PSRemoting דרך SSH.

הגדרת Linux (שרת) לשימוש ב-PSRemoting דרך SSH

השלב הבא הוא התקנת PowerShell והגדרת OpenSSH על Linux בהגדרה דומה; יש להתקין את PowerShell ולהגדיר את OpenSSH.

שימו לב שכמו שאנו משתמשים ב-CentOS, ייתכן שהפקודות יהיו שונות אם אתם משתמשים בהפצה שונה.

התקנת PowerShell 7+

ראשית, התקינו את PowerShell 7. המדריך הזה לא יכסה איך לעשות זאת. במקום זה, הקפידו לבדוק את הקישור הבא.

קשור: איך להוריד ולהתקין את PowerShell 7 על Windows, macOS ו-Linux

הגדרת OpenSSH

כמו ב-Windows Server, תצטרכו להתקין את OpenSSH. לעומת Windows, אולם, ייתכן והוא כבר מותקן. עבור המדריך הזה שרץ על CentOS 8, המכונה של Linux כבר מכילה גם את הלקוח והשרת כברירת מחדל, אך ניתן לבדוק זאת באמצעות הפקודה הבאה:

rpm -qa openssh*

אם הלקוח והשרת מותקנים, אתם אמורים לקבל תוצאה דומה לזו שמוצגת למעלה.

Configuring OpenSSH

הגדירו את קובץ התצורה של SSH על ידי:

  1. פתיחת קובץ ה-sshd_config באמצעות הפקודה sudo vi /etc/ssh/sshd_config.

2. הוספת התת-מערכת של PowerShell כמו ב-Windows Server על ידי הוספת השורה לקובץ התצורה.

Subsystem powershell /usr/bin/pwsh -sshs -NoLogo

3. יציאה מ-vi ושמירה של הקובץ.

4. איתחול מחדש של השירות SSH כדי להחיל את השינויים באמצעות הפקודה sudo systemctl restart sshd.

באופן כללי, אימות בסיסי ואימות באמצעות מפתחות יופעלו ברוב המקרים, כולל CentOS 8. אין צורך להוסיף אותם כאן.

אין בעיה! הנה התרגום:

התחברות ל/מ-Windows/Linux עם אימות באמצעות סיסמה

לאחר שהכנסת את כל ההגדרות במערכות ה-Linux וה-Windows, הגיע הזמן לשים את העבודה שעשית לשימוש יומיומי. בוא ננסה כעת להתחבר מ-Windows ל-Linux ולהפך באמצעות אימות באמצעות סיסמה.

אימות באמצעות סיסמה נראה ומרגיש כמו שימוש ב-SSH עם שם משתמש וסיסמה.

פקודות התחברות

כדי לבדוק את ההתחברות עם PSRemoting דרך SSH מ-Windows ל-Linux או מ-Linux ל-Windows, בוא נשתמש בשני סוגים של התחברות – הראשונה היא "ad-hoc" באמצעות הפקודה Invoke-Command והשנייה היא התחברות עמידה באמצעות New-PSSession.

קשור: Invoke-Command: הדרך הטובה ביותר להפעיל קוד מרחוק

נבדוק את ההתחברות עם PSRemoting באמצעות Invoke-Command על ידי:

  1. פתיחת חלון פוורשל 7 של PowerShell.

2. הגדרת פרמטרים עבור הפקודה Invoke-Command. במקרה זה, הפרמטרים למטה יתחברו למחשב בשם SRV1 באמצעות חשבון משתמש מקומי ב-SRV1 בשם User.

$SessionParams = @{
     HostName = SRV1
     UserName = user
     SSHTransport = $true
 }

3. הפעלת Invoke-Command על ידי splatting של הפרמטרים למעלה והרצת פקודה (במקרה זה Get-Process) בתוך scriptblock.

קשור: PowerShell Splatting: מה זה ואיך זה עובד?

Invoke-Command @SessionParams -ScriptBlock {Get-Process}

אז תראו רשימה של כל התוכניות הרצות על המחשב SRV1.

בנוסף, ניתן להקים חיבור עמיד המאפשר לכם להתחבר ולהפעיל פקודות באופן אינטראקטיבי על ידי:

  1. ספק את הפרמטרים למעלה והעבירו לפקודת ה-New-PSSession.

2. התחברות להפעלת הסשן באמצעות פקודת ה-Enter-PSSession.

Create a persistent session
 $session = New-PSSession @SessionParams
 Connect interactively
 Enter-PSSession -Session $session

3. לאחר הפעלת פקודת Enter-PSSession מלמעלה, יתבקש מכם להזין את הסיסמה של המשתמש. לאחר אימות הזהות, תתחברו למחשב השני בתוך PowerShell.

שימו לב שאף אחת מהפקודות לא דרשה את הפרמטר הנפוץ Credential לספק שם משתמש וסיסמה להתחברות. במקום זאת, השתמשנו בפרמטר SSHTransport. SSH אינו משתמש באותה תהליך אימות שווה לאותו שווה של Windows להתקשר ממחשב Windows אחד למחשב אחר, ולכן הוא אינו מפעיל עם אובייקטי PSCredential.

קשור: שימוש בפקודת Get-Credential ב-PowerShell וכל מה שקשור לזיהויות.

באמצעות הגישה הזו, ניתן גם לנצל סשנים מנותקים.

הגדרת אימות על פי מפתחות ציבור

בעוד אימות המבוסס על סיסמא פשוט להתקין ופשוט לשימוש, ישנם שני בעיות.

  • אין דרך לאמת בלעדיך להריץ את הפקודות באופן בטוח.
  • אתה שולח סיסמא דרך הרשת.

אף שהסיסמא במקרה זה מוצפנת במסגרת חיבור ה-SSH, השרת מקבל את הסיסמא בטקסט גלוי. אם השרת נפגע בכל דרך, ייתכן שזה יהפוך לבעיה אבטחתית.

יצירת מפתחות ציבור/פרטיים

כאשר אתה משתמש באימות באמצעות מפתח ציבור בכל סוג, עליך תחילה ליצור מפתח ציבור מהלקוח. הדרישה הזו חלה גם על Linux וגם על Windows.

על מכונת השרת של Linux או Windows:

  1. הפעל את ssh-keygen כדי ליצור את זוג המפתחות.

אם אתה מפעיל ssh-keygen ב-Linux, יש לך לדעת שזה ייצור זוג מפתחות RSA כבררת מחדל. רוב מערכות ההפעלה החדשות של Linux לא יאפשרו שימוש בזוגות מפתחות RSA לאימות כבררת מחדל. כדי לתקן זאת, השתמש ב-ssh-keygen -t ed25519.

2. תתבקש לספק נתיב לאחסון מפתח הפרטי וססמא להצפנתו. אם ברצונך לא לספק סיסמא במהלך האימות, תשאיר את הססמא ריקה.

3. Windows בלבד: הפעל את הפקודות הבאות מ-PowerShell, כאשר <ProfilePath> הוא נתיב הפרופיל שלך (לרוב C:\Users\UserName).

Set-Service ssh-agent -StartupType Automatic
 Start-Service ssh-agent
 ssh-add .ssh\id_ed25519
 Remove-Item ~.ssh\id_ed25519

המימוש של Windows של OpenSSH מכיל שירות ssh-agent שמאפשר לך לאחסן מפתחות פרטיים בתוך הקשר האבטחתי של Windows של המשתמש שבו אתה מחובר. זה יאפשר לך לייבא את המפתח הפרטי שלך ל-ssh-agent ולאחר מכן למחוק את המפתח ממערכת הקבצים כדי לאבטח אותו נוסף.

4. העתק את המפתח הציבורי שנוצר (<directory הבית של המשתמש>\.ssh\id_ed25519.pub) לשרת שאליו אתה מתכוון להתחבר. Windows אינו מספקת כלי לביצוע העתקה זו, ולכן יש לבצע את הפעולה עם SCP. הפעל את הפקודה למטה כדי להעתיק את המפתח הציבורי למכונת Linux.

scp C:\Users\Username.ssh\id_ed25519.pub username@ServerB:~/.ssh/authorized_keys

כדי להעתיק מ-Linux ל-Windows:

scp ~/.ssh/id_ed25519.pub administrator@ServerA:.ssh/authorized_keys

5. הכנס את סיסמת המשתמש שמחובר. לאחר הקלדתה, PowerShell/Bash יעתיקו את המפתח ותתנתק מהמכונה המרוחקת.

חיבור ל/from Windows/Linux עם אימות מפתח ציבור

לאחר שהגדרת את המפתחות הציבורי והפרטי, התחברות מ-Windows ומ-Linux אמורה להיות פשוטה. זה דומה כמעט לחיבור באמצעות סיסמה.

כדי להתחבר עם מפתח ציבור ב-Windows, השתמש בפקודות זהות כפי שמוצג ב-פקודות חיבור למעלה. תשים לב להבחנה אחת; לא יתבקש ממך להזין פרטי כניסה.

למטה דוגמה לחיבור מ-Linux ל-Windows באמצעות המפתח הציבורי, עם שימוש במצב ה--v לראות את האירועים של החיבור.

Example of connecting from Linux to Windows using the -v switch

Source:
https://adamtheautomator.com/psremoting-linux/