אחת הדברים הנהדרים בכך ש-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 ומתקינה אותן, כך שהיא תתקין גם את הלקוח וגם את השרת.
אם ברצונך להתקין רק את הלקוח, שנה את הסננים בתוך בלוק הסקריפט של
where-object
ל-openssh.client*
ולשרת, הסנן צריך להיותopenssh.server*
.
קשור: התחלה עם ssh ו-powershell
הפעלת שרת ה-ssh
פעם ש-openssh מותקן, זה יפתח את חומת האש של windows בפורט 22, אך לא יפעיל את שירות השרת של openssh להאזנה בפורט. כדי להעלות את שרת openssh ב-windows server, הפעל את הפקודה הבאה ב-powershell כדי להתחיל את שרת openssh ולהגדיר את השירות להתחיל בעת האתחול.
הגדרת הגדרות openssh
השלב הבא הוא לשנות את קובץ התצורה של השרת (daemon) של `sshd_config` sshd_config daemon configuration file. בתוך קובץ זה, עליך לאמת תחילה שאימות ססמא מאופשר וגם להוסיף את תת-המערכת של PowerShell.
החלק הזה של המדריך מגדיר את השלב הקל ביותר באמצעות השתמשות בסיסמאות. תלמד גם איך להגדיר אימות SSH באמצעות תעודות מאוחר יותר במדריך זה.
- פתח את קובץ התצורה בעורך טקסט שאתה אוהב ב־C:\ProgramData\ssh\sshd_config.
2. אמת שאימות ססמא מאופשרת בשורה בה הערה עם #
בתחילתה או שהיא מוגדרת ל־yes
.

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 כבר מכילה גם את הלקוח והשרת כברירת מחדל, אך ניתן לבדוק זאת באמצעות הפקודה הבאה:
אם הלקוח והשרת מותקנים, אתם אמורים לקבל תוצאה דומה לזו שמוצגת למעלה.

הגדירו את קובץ התצורה של 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 עם אימות באמצעות סיסמה
לאחר שהכנסת את כל ההגדרות במערכות ה-Linux וה-Windows, הגיע הזמן לשים את העבודה שעשית לשימוש יומיומי. בוא ננסה כעת להתחבר מ-Windows ל-Linux ולהפך באמצעות אימות באמצעות סיסמה.
אימות באמצעות סיסמה נראה ומרגיש כמו שימוש ב-SSH עם שם משתמש וסיסמה.
פקודות התחברות
כדי לבדוק את ההתחברות עם PSRemoting דרך SSH מ-Windows ל-Linux או מ-Linux ל-Windows, בוא נשתמש בשני סוגים של התחברות – הראשונה היא "ad-hoc" באמצעות הפקודה Invoke-Command
והשנייה היא התחברות עמידה באמצעות New-PSSession
.
קשור: Invoke-Command: הדרך הטובה ביותר להפעיל קוד מרחוק
נבדוק את ההתחברות עם PSRemoting באמצעות Invoke-Command
על ידי:
- פתיחת חלון פוורשל 7 של PowerShell.
2. הגדרת פרמטרים עבור הפקודה Invoke-Command
. במקרה זה, הפרמטרים למטה יתחברו למחשב בשם SRV1 באמצעות חשבון משתמש מקומי ב-SRV1 בשם User.
3. הפעלת Invoke-Command
על ידי splatting של הפרמטרים למעלה והרצת פקודה (במקרה זה Get-Process
) בתוך scriptblock.
קשור: PowerShell Splatting: מה זה ואיך זה עובד?
אז תראו רשימה של כל התוכניות הרצות על המחשב SRV1.
בנוסף, ניתן להקים חיבור עמיד המאפשר לכם להתחבר ולהפעיל פקודות באופן אינטראקטיבי על ידי:
- ספק את הפרמטרים למעלה והעבירו לפקודת ה-
New-PSSession
.
2. התחברות להפעלת הסשן באמצעות פקודת ה-Enter-PSSession
.
3. לאחר הפעלת פקודת Enter-PSSession
מלמעלה, יתבקש מכם להזין את הסיסמה של המשתמש. לאחר אימות הזהות, תתחברו למחשב השני בתוך PowerShell.
שימו לב שאף אחת מהפקודות לא דרשה את הפרמטר הנפוץ Credential
לספק שם משתמש וסיסמה להתחברות. במקום זאת, השתמשנו בפרמטר SSHTransport
. SSH אינו משתמש באותה תהליך אימות שווה לאותו שווה של Windows להתקשר ממחשב Windows אחד למחשב אחר, ולכן הוא אינו מפעיל עם אובייקטי PSCredential.
קשור: שימוש בפקודת Get-Credential
ב-PowerShell וכל מה שקשור לזיהויות.
באמצעות הגישה הזו, ניתן גם לנצל סשנים מנותקים.
הגדרת אימות על פי מפתחות ציבור
בעוד אימות המבוסס על סיסמא פשוט להתקין ופשוט לשימוש, ישנם שני בעיות.
- אין דרך לאמת בלעדיך להריץ את הפקודות באופן בטוח.
- אתה שולח סיסמא דרך הרשת.
אף שהסיסמא במקרה זה מוצפנת במסגרת חיבור ה-SSH, השרת מקבל את הסיסמא בטקסט גלוי. אם השרת נפגע בכל דרך, ייתכן שזה יהפוך לבעיה אבטחתית.
יצירת מפתחות ציבור/פרטיים
כאשר אתה משתמש באימות באמצעות מפתח ציבור בכל סוג, עליך תחילה ליצור מפתח ציבור מהלקוח. הדרישה הזו חלה גם על Linux וגם על Windows.
על מכונת השרת של Linux או Windows:
- הפעל את
ssh-keygen
כדי ליצור את זוג המפתחות.
אם אתה מפעיל
ssh-keygen
ב-Linux, יש לך לדעת שזה ייצור זוג מפתחות RSA כבררת מחדל. רוב מערכות ההפעלה החדשות של Linux לא יאפשרו שימוש בזוגות מפתחות RSA לאימות כבררת מחדל. כדי לתקן זאת, השתמש ב-ssh-keygen -t ed25519
.
2. תתבקש לספק נתיב לאחסון מפתח הפרטי וססמא להצפנתו. אם ברצונך לא לספק סיסמא במהלך האימות, תשאיר את הססמא ריקה.
3. Windows בלבד: הפעל את הפקודות הבאות מ-PowerShell, כאשר <ProfilePath>
הוא נתיב הפרופיל שלך (לרוב C:\Users\UserName).
המימוש של Windows של OpenSSH מכיל שירות ssh-agent שמאפשר לך לאחסן מפתחות פרטיים בתוך הקשר האבטחתי של Windows של המשתמש שבו אתה מחובר. זה יאפשר לך לייבא את המפתח הפרטי שלך ל-ssh-agent ולאחר מכן למחוק את המפתח ממערכת הקבצים כדי לאבטח אותו נוסף.
4. העתק את המפתח הציבורי שנוצר (<directory הבית של המשתמש>\.ssh\id_ed25519.pub) לשרת שאליו אתה מתכוון להתחבר. Windows אינו מספקת כלי לביצוע העתקה זו, ולכן יש לבצע את הפעולה עם SCP. הפעל את הפקודה למטה כדי להעתיק את המפתח הציבורי למכונת Linux.
כדי להעתיק מ-Linux ל-Windows:
5. הכנס את סיסמת המשתמש שמחובר. לאחר הקלדתה, PowerShell/Bash יעתיקו את המפתח ותתנתק מהמכונה המרוחקת.
חיבור ל/from Windows/Linux עם אימות מפתח ציבור
לאחר שהגדרת את המפתחות הציבורי והפרטי, התחברות מ-Windows ומ-Linux אמורה להיות פשוטה. זה דומה כמעט לחיבור באמצעות סיסמה.
כדי להתחבר עם מפתח ציבור ב-Windows, השתמש בפקודות זהות כפי שמוצג ב-פקודות חיבור למעלה. תשים לב להבחנה אחת; לא יתבקש ממך להזין פרטי כניסה.
למטה דוגמה לחיבור מ-Linux ל-Windows באמצעות המפתח הציבורי, עם שימוש במצב ה--v
לראות את האירועים של החיבור.

-v
switch