איך להגדיר את OpenSSH ב-Windows Server [מדריך מלא]

הפרוטוקול Secure Shell (SSH) ופרויקט OpenSSH קיימים עשורים רבים על מערכת ההפעלה Linux. אך רק לאחרונה תומכים בו בעולם ה- Windows. בכל זאת, שרת Windows אינו מוגדר מראש ומוכן לשימוש, ודורש הגדרה מסוימת.

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

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

כדי לממש את הדוגמאות והדמויות במאמר זה, עליך לעמוד בדרישות הבאות:

  • 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

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

כדי להתחיל, עליך תחילה להוריד את OpenSSH. כדי לעשות זאת, עקוב אחר השלבים הבאים:

  1. התחבר לשולחן העבודה בשרת Windows באמצעות Remote Desktop (RDP) או לקוח מנהל שולחן העבודה המועדף עליך.

שני. על שולחן העבודה של השרת שלך ב-Windows, פתח חלון פושע PowerShell של Windows ברמה מתקדמת.

שלב, העתק את הקוד למטה, הדבק אותו בחלון ה-PowerShell ולחץ על Enter. סקריפט זה יוריד את הגרסה האחרונה של OpenSSH, שבכתיבה זו, היא v8.1.0.0p1-Beta, לתיקייה הנוכחית.

אם ברצונך לשמור את קוד ה-PowerShell להורדת OpenSSH, תוכל גם לפתוח עורך קוד כמו Windows PowerShell ISE או Visual Studio Code ולשמור אותו שם.

## הגדר פרוטוקול חיבור הרשת ל-TLS 1.2
## הגדר את כתובת ה-URL להורדת גרסה האחרונה של OpenSSH
 $url = 'https://github.com/PowerShell/Win32-OpenSSH/releases/latest/'
## צור בקשת רשת לקבלת קישור הורדת הגרסה האחרונה
 $request = [System.Net.WebRequest]::Create($url)
 $request.AllowAutoRedirect=$false
 $response=$request.GetResponse()
 $source = $([String]$response.GetResponseHeader("Location")).Replace('tag','download') + '/OpenSSH-Win64.zip'
## הורד את חבילת OpenSSH האחרונה ל-Windows לתיקייה הנוכחית
 $webClient = [System.Net.WebClient]::new()
 $webClient.DownloadFile($source, (Get-Location).Path + '\OpenSSH-Win64.zip')

4. כעת, קובץ OpenSSH-Win64.zip צריך להימצא בתיקיית העבודה הנוכחית שלך. תאמת זאת על ידי הרצת הפקודה למטה.

Get-ChildItem *.zip

כפי שניתן לראות למטה, קובץ OpenSSH-Win64.zip קיים בתיקייה.

Checking if the OpenSSH zip file exists

התקנת OpenSSH

לאחר שהורדת את OpenSSH-Win64.zip, השלב הבא הוא להתקין את OpenSSH על השרת. אין אשף התקנה במקרה שתצפה לכך.

  1. כשעדיין נמצאים באותו סשן של PowerShell, העתק את הקוד למטה והרץ אותו ב-PowerShell. קוד זה מחלץ את תוכן הקובץ OpenSSH-Win64.zip לתיקייה C:\Program Files\OpenSSH.
# מחלץ את ה-ZIP למיקום זמני
 Expand-Archive -Path .\OpenSSH-Win64.zip -DestinationPath ($env:temp) -Force
# מעביר את תוכן ה-ZIP שנמחץ מהמיקום הזמני ל-C:\Program Files\OpenSSH\
 Move-Item "$($env:temp)\OpenSSH-Win64" -Destination "C:\Program Files\OpenSSH\" -Force
# מסיר את החסימה מקבצים ב-C:\Program Files\OpenSSH\
 Get-ChildItem -Path "C:\Program Files\OpenSSH\" | Unblock-File

2. לאחר חילוץ קובץ ה-ZIP, הפעל את הפקודה למטה ב-PowerShell כדי לבצע את התסריט C:\Program Files\OpenSSH\install-sshd.ps1. תסריט זה מתקין את שירות שרת SSH (sshd) ושירות סוכן אימות OpenSSH (sshd-agent).

& 'C:\Program Files\OpenSSH\install-sshd.ps1'

תוכל לראות את התוצאה הצפויה למטה.

Installing OpenSSH

כדי לוודא שהשרת SSH מתחיל אוטומטית, הפעל את הפקודה למטה ב-PowerShell.

## משנה את סוג ההפעלה של שירות ה-sshd מידני לאוטומטי.
 Set-Service sshd -StartupType Automatic
## מפעיל את שירות ה-sshd.
 Start-Service sshd

הוספת כלל לקיר האש של Windows לאישור תעבורת SSH

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

מתקין את OpenSSH לא יוצר אוטומטית חוק יוצא בקיר אש שמאפשר תעבורת SSH. לכן, המשימה הבאה שלך היא ליצור באופן ידני את חוק הקיר האש.

אחת מהדרכים הפשוטות ליצור חוק חדש בקיר האש של Windows היא עם PowerShell והפקודה New-NetFirewallRule. הפקודה למטה יוצרת חוק קיר אש בשם Allow SSH שמאפשר תעבורת TCP נכנסת לכל תעבורה המופנית ליציאה 22.

העתק את הפקודה למטה והפעל אותה ב-PowerShell.

New-NetFirewallRule -Name sshd -DisplayName 'Allow SSH' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

בתמונה למטה מוצגת הפלט הצפוי ב-PowerShell לאחר יצירת חוק הקיר האש.

Creating a Windows Firewall Rule to allow Port 22

חיבור באמצעות SSH באמצעות אימות סיסמה

בנקודה זו, התקנת OpenSSH על Windows וביצעת את התקנת השרת הראשונית. השלב הבא הוא לבדוק האם יש אכן אפשרות להתחבר דרך SSH.

כדי לבדוק את השרת SSH שהוגדר כעת, בוא נפעיל את הפקודה ssh במחשב המקומי שלך.

אותם שלבים בסעיף זה נחולקים גם כאשר מתחברים לשרת SSH ב-Linux.

1. ממחשב המקומי שלך הפעם, פתח את PowerShell.

2. לאחר מכן, הפעל את הפקודה למטה כדי להתחיל בתהליך התחברות ה-SSH. וודא שאתה משנה את שם המשתמש והשרת המרוחק של ה-Windows Server שלך.

ssh june@40.117.77.227

3. מאחר ואתה מתחבר לשרת לראשונה, יופיע לך הודעה שאומרת ש-האותנות של המארח אינן מאומתות. ההודעה מציינת שהמחשב שלך אינו מזהה את המארח הרחוק עדיין. הקלד yes ולחץ על Enter כדי להמשיך.

4. כשיש לך הודעה לקלידת הסיסמה, הקלד את סיסמת החשבון שלך ולחץ על Enter.

Connecting via SSH using Password Authentication

5. לאחר התחברות, כפי שניתן לראות בתמונת המסך למטה, תגיע לשורת הפקודה של המארח הרחוק. אם ברצונך לוודא שהכנסת לשורת הפקודה במארח הרחוק, הקלד hostname ולחץ על Enter. הפקודה צריכה להחזיר את שם המחשב הרחוק.

Getting the hostname of the SSH server

שינוי של הקסדה ברירת מחדל של OpenSSH ל-PowerShell

כשאתה נכנס לשרת ה-SSH של Windows שלך לראשונה, תשים לב שהקסדה או המפרט הפקודה ברירת המחדל הוא CMD. יש לך אפשרות להשאיר את CMD כקסדה ברירת המחדל של SSH, אך אם תעדיף להשתמש ב-PowerShell כקסדה ברירת המחדל, עקוב אחרי השלבים האלה.

כדי לשנות את הקסדה ברירת המחדל של OpenSSH מ-CMD ל-PowerShell:

ראשית, פתח חלון PowerShell מוגבל ברמה גבוהה בשרת ה-Windows שלך, אם אין לך פתוח כבר.

בשלב הבא, צור ערך מחרוזת חדש בשם DefaultShell ברישומים במפתח HKLM:\SOFTWARE\OpenSSH. הגדר את נתוני המחרוזת DefaultShell לנתיב של Windows PowerShell C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

תמונת המסך למטה מציגה את התוצאה הצפויה מהפקודה.

Changing the default OpenSSH shell

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

בקטעים הקודמים, חיברת עם שם משתמש וסיסמה. זה עובד אך דרך מאובטחת יותר לאמת עם שרת 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 .

New-Item -Type File -Path C:\ProgramData\ssh\administrators_authorized_keys

אתה אמור לראות תוצאה דומה לצילום המסך למטה.

Creating the administrators_authorized_keys file

3. לאחר מכן, קבל את ה־ACL שמוקצה כעת לקובץ ssh_host_dsa_key והעתק את ה־ACL הזה לקובץ administrators_authorized_keys. כדי לעשות זאת, הרץ את הפקודה למטה.

get-acl C:\ProgramData\ssh\ssh_host_dsa_key | set-acl C:\ProgramData\ssh\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. בדף המאפיינים, לחץ על הלשונית אבטחה ולחץ על מתקדם.

Opening advanced security settings

8. לאחר מכן, וודא אם ההרשאות כפי שמוצגות כמו בדימוי שמופיע למטה.

Viewing advanced security permission

יצירת זוג מפתחות SSH חדש

כדי ליצור זוג מפתחות SSH חדש, השתמש בפקודה ssh-keygen, שהיא חלק מכלי הלקוח OpenSSH שמובנים ב-Windows 10 (ומעלה) וברוב מערכות ההפעלה של Linux.

הדוגמה המוצגת בסעיף זה עובדת גם על מחשבים ב-Windows וב-Linux.

על המחשב המקומי שלך, בקונסולת PowerShell:

1. נווט לתיקיית .ssh בתיקיית הבית שלך על ידי הפעלת הפקודה הבאה.

cd ~/.ssh

2. לְבַצֵע זאת, הקלד את הפקודה ssh-keygen ולחץ Enter. כאשר יתבקש ממך להזין מיקום קובץ לשמירת המפתח שאתה מייצר, שמור על המיקום הברירת מחדל ולחץ Enter. בכך ניתן ללקוח SSH שלך למצוא את המפתחות שלך SSH בעת אימות אוטומטי.

במערכת ההפעלה Windows, קובץ המפתח ברירת המחדל הוא C:\Users\<username>\.ssh\id_rsa.

3. בתוך הבקשה הבאה, השאר את הסיסמה ריקה. בנקודה זו, אין צורך להשתמש בסיסמה למבחן.

הוספת סיסמה למפתח הפרטי שלך מגבירה באופן משמעותי את האבטחה שלו. סיסמה משמשת כאימות מרכזי שני (2FA) למפתח הפרטי שלך.

תשים לב שהפקודה יצרה שני קבצים; id_rsa (מפתח פרטי) ו־id_rsa.pub (מפתח ציבורי).

Generating a new SSH key pair on the local computer

התקנת המפתח הציבורי על שרת SSH של Windows

עכשיו שיצרת זוג מפתחות פרטיים-ציבוריים, השלב הבא שלך הוא להעתיק את המפתח הציבורי אל קובץ C:\ProgramData\ssh\administrators_authorized_keys על השרת SSH.

במחשב המקומי שלך, בקונסול PowerShell:

1. העתק את הקוד למטה והפעל אותו בפוורשל. וודא ששינית את שם המשתמש וכתובת ה־IP קודם. באפשרותך להתייחס להערה למעלה מכל פקודה כדי לדעת מה כל פקודה עושה.

# קרא את המפתח הציבורי
 $public_key = Get-Content ~/.ssh/id_rsa.pub
# הוסף את המפתח הציבורי ל־administrators_authorized_keys על השרת באמצעות ssh.
 ssh june@40.177.77.227 "'$($public_key)' | Out-File C:\ProgramData\ssh\administrators_authorized_keys -Encoding UTF8 -Append"

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

Deploying the public key to the Windows SSH server

התחברות באמצעות SSH באמצעות אימות מפתח ציבור

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

Connecting with SSH using Public Key Authentication

הגדרת אימות באמצעות תעוזה

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

אין צורך למפתח את המפתח הציבורי לקובץ authorized_keys או administrators_authorized_keys בשרת ה-SSH. במקום זאת, המפתח הציבורי מחותם באמצעות מפתח רשות התעוזה (CA).

יצירת מפתח רשות התעוזה (CA)

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

בצע את הפקודה ssh-keygen כפי שמוצג למטה. פקודה זו תיצור את מפתח ה־CA בתיקייה C:\ProgramData\ssh\ca_userkeys, אך ניתן להשתמש בשם קובץ שונה לבחירתך. השימוש בשם קובץ שונה לא ישפיע על פונקציונליות מפתח ה־CA.

כאשר יתבקש ממך להזין סיסמה, השאר את הסיסמה ריקה ולחץ על Enter.

ssh-keygen -f C:\ProgramData\ssh\ca_userkeys

תוכל לראות למטה כי הפקודה יצרה שני קבצים. ca_userkeys, שהוא המפתח הפרטי, ו־ca_userkeys.pub, שהוא המפתח הציבורי.

Creating the Certificate Authority (CA) Key on a Windows SSH server

עכשיו שיצרת את מפתחי ה־CA, יש להודיע לשרת SSH לסמוך על ה־CA ואיפה למצוא את מפתח ה־CA. כדי לעשות זאת, יש להוסיף שורה חדשה TrustedUserCAKeys path/to/ca_userkeys.pub לקובץ C:\ProgramData\ssh\sshd_config בשרת.

הרץ את הפקודות להוספת הפריט התצורתי בקובץ sshd_config.

# אם שרת ה־SSH הוא Windows
 echo TrustedUserCAKeys C:\ProgramData\ssh\ca_userkeys.pub>> C:\ProgramData\ssh\sshd_config

חתימה על מפתח הציבור של המשתמש

בנקודה זו, יצרת את מפתחי ה־CA והגדרת את שרת ה־SSH לסמוך על קובץ המפתח הציבורי של ה־CA. המשאיר לעשות כעת הוא לחתום על מפתח הציבור שלך.

במחשב המקומי שלך, בקונסול PowerShell:

1. העתק את הקובץ id_rsa.pub לתיקיית הבית שלך בשרת SSH באמצעות הפקודה SCP. וודא שמשתמש הוא הנכון והכתובת ה־IP נכונים.

scp ((Resolve-Path ~/.ssh/id_rsa.pub).Path) june@40.117.77.227:id_rsa.pub

שלבו לשרת Windows שלכם באמצעות ssh. לאחר התחברות, הריצו את הפקודה ssh-keygen כדי לחתום על מפתח הציבור של המשתמש. תגים

  • יש לשמור אותם אם קיימים, ואז נפרט את הפרמטרים של הפקודה:

    -s C:\ProgramData\ssh\ca_userkeys – ציינו את מיקום מפתח ה-CA לחתימת מפתח הציבור. בדוגמה זו, מפתח ה-CA הוא המפתח שיצרתם.

  • -I id_username – ציינו את הזהות שברצונכם להקצות למפתח הציבור שחתום. שנו את הערך של id_username לשם רצוי.
  • -V +4w – הפרמטר הזה קובע את תקופת התוקף של מפתח החתימה. בדוגמה זו, +4w אומר שהמפתח יהיה בתוקף למשך ארבעה שבועות. ניתן לשנות את הערך לפי התקופה שתרצו.
  • -n username – זהו שם המשתמש שיהיה בבעלות מפתח הציבור שחתום.
  • <path to id_rsa.pub> – זהו מיקום מפתח הציבור של המשתמש לחתימה (ב-Windows).
ssh-keygen -s C:\ProgramData\ssh\ca_userkeys -I id_username -V +4w -n username ~/id_rsa.pub

לאחר הרצת הפקודה בחיבור ה-SSH, תקבלו פלט דומה למוצג למטה. כפי שניתן לראות, הפקודה יצרה קובץ חדש בשם id_rsa-cert.pub, שהוא תעודת האימות שחתומה של המשתמש.

Signing the User Key

3. כעת, חזרו לסשן PowerShell במחשב המקומי והעתיקו את הקובץ id_rsa-cert.pub מהשרת למחשב המקומי שלכם. שימו לב לשנות את שם המשתמש וכתובת ה-IP לערכים הנכונים לפני הרצת הפקודה.

scp june@40.117.77.227:id_rsa-cert.pub ((Resolve-Path ~/.ssh/).Path)

לאחר ההעתקה, תמצאו את תעודת המשתמש החתומה בתיקיית הבית שלכם, כפי שמוצג למטה.

Finding the SSH user certificate

התחברות באמצעות SSH באמצעות אימות באמצעות תעודה.

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

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

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

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

כאשר מחוברים ל-Windows Server דרך SSH:

1. הפעל את הקוד הבא בפוורשל כדי לרוקן את קובץ administrators_authorized_keys.

# נקה את קובץ ה administrators_authorized_keys
 $NULL > C:\ProgramData\ssh\administrators_authorized_keys
# אשר שקובץ ה administrators_authorized_keys רוקן
 Get-Content C:\ProgramData\ssh\administrators_authorized_keys

2. בנקודה זו, קבצי ה authorized_keys ו- administrators_authorized_keys הם ריקים, כפי שניתן לראות בתמונת המסך למטה.

Emptying the administrators_authorized_keys

3. הקלד exit ולחץ Enter כדי להתנתק מהסשן שלך ב-SSH. תחזור לסשן שלך בפוורשל.

4. לאחר הסרת המפתחות הציבוריים, ניסיון ההתחברות הבא שלך ישתמש באימות באמצעות תעודת. חוויית ההתחברות תהיה דומה לאימות באמצעות מפתח ציבור.

Connecting with SSH using Certificate Authentication

סיכום

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

Source:
https://adamtheautomator.com/openssh-windows/