כיצד להפעיל ולהגדיר שרת SSH ב- Windows עם OpenSSH


שרת SSH המבוסס על חבילת OpenSSH הוא חלק ממערכת ההפעלה בכל הגירסאות המודרניות של Windows. במאמר זה, נראה לך כיצד להתקין ולהגדיר את שרת OpenSSH ב- Windows 10/11 וב- Windows Server 2022/2019 ולהתחבר אליו מרחוק באמצעות חיבור SSH מאובטח (בדיוק כמו ב- Linux 🙂).

כיצד להתקין שרת OpenSSH ב- Windows?

חבילת OpenSSH Server היא חלק מכל הגירסאות המודרניות של Windows 10 (החל מ- 1803), Windows 11 ו- Windows Server 2022/2019 כתכונה לפי דרישה (FoD). כדי להתקין את שרת OpenSSH, פתח את שורת PowerShell עם הרשאות מלאות והפעל את הפקודה:

Get-WindowsCapability -Online | Where-Object Name -like ‘OpenSSH.Server*’ | Add-WindowsCapability -Online 

או באמצעות DISM:

dism /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0

אם המחשב שלך מחובר ישירות לאינטרנט, חבילת OpenSSH.Server תורד ותותקן ב- Windows.

ניתן גם להתקין את OpenSSH ב- Windows 10/11 דרך חלונית ההגדרות המודרנית (הגדרות -> אפליקציות ותכונות -> תכונות אופציונליות -> הוסף תכונה). מצא פתח שרת SSH ברשימה ולחץ על התקן.

באפשרותך גם להתקין את Remote Server Administration Tools (RSAT) מכאן.

במחשבים בסביבות מנותקות (לא מקוונות), באפשרותך להתקין את שרת OpenSSH מתוך תמונת ISO של תכונה לפי דרישה (זמינה בחשבון שלך באתרי האינטרנט של Microsoft: MSDN או my.visualstudio.com). הורד את ה- ISO וחלץ את תוכנו לתיקייה E:\FOD (ניתן רק לחלץ את הקובץ

OpenSSH-Server-Package~31bf3856ad364e35~amd64~~.cab

) והתקן את התכונה Windows מהמאגר המקומי:

Add-WindowsCapability -Name OpenSSH.Server~~~~0.0.1.0 -Online -Source E:\FOD

מתקין MSI עבור OpenSSH עבור Windows זמין גם במאגר הרשמי של Microsoft ב- GitHub (https://github.com/PowerShell/Win32-OpenSSH/releases/). לדוגמה, עבור Windows 10 x64, עליך להוריד ולהתקין את חבילת OpenSSH-Win64-v8.9.1.0.msi. הפקודה הבאה של PowerShell תוריד את קובץ MSI ותתקין את הלקוח והשרת OpenSSH במחשב שלך:

Invoke-WebRequest https://github.com/PowerShell/Win32-OpenSSH/releases/download/v8.9.1.0p1-Beta/OpenSSH-Win64-v8.9.1.0.msi -OutFile $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi -UseBasicParsing
msiexec /i $HOME\Downloads\OpenSSH-Win64-v8.9.1.0.msi

באפשרותך להתקין שרת OpenSSH גם בגירסאות קודמות של Windows (Windows 8.1, Windows Server 2016/2012R2/2012). בדוק את הדוגמה כיצד להתקין ולהגדיר Win32-OpenSSH במאמר "כיצד להגדיר שרת SFTP (SSH FTP) ב- Windows? ".

כדי לוודא ששרת OpenSSH הותקן, הפעל את הפקודה:

Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
State : Installed

קביעת תצורה של שרת SSH ב- Windows

לאחר התקנת שרת OpenSSH ב- Windows, מתווספים שני שירותים:

  • ssh-agent (OpenSSH Authentication Agent) - ניתן להשתמש בו לניהול מפתחות פרטיים אם הגדרת אימות מפתח SSH;

  • sshd (שרת OpenSSH SSH).

עליך לשנות את סוג ההפעלה של שירות sshd לאוטומטי ולהפעיל את השירות באמצעות PowerShell:

Set-Service -Name sshd -StartupType 'Automatic'
Start-Service sshd

השתמש בפקודה netstat כדי לוודא ששרת SSH פועל וממתין לחיבורים ביציאת TCP 22:

netstat -na| find ":22"

ודא שחומת האש של Windows Defender מאפשרת חיבורים נכנסים ל- Windows דרך יציאת TCP 22:

Get-NetFirewallRule -Name *OpenSSH-Server* |select Name, DisplayName, Description, Enabled
Name DisplayName Description Enabled
---- ----------- ----------- -------
OpenSSH-Server-In-TCP OpenSSH SSH Server (sshd) Inbound rule for OpenSSH SSH Server (sshd) True

אם הכלל אינו זמין (Enabled=False) או חסר, באפשרותך ליצור כלל נכנס חדש באמצעות ה- cmdlet New-NetFirewallRule:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22

כברירת מחדל, רכיבי OpenSSH מרכזיים ממוקמים בתיקיות הבאות:

  • קבצי הפעלה של OpenSSH Server:

    C:\Windows\System32\OpenSSH\

    (sshd.exe, ssh.exe, ssh-keygen.exe, sftp.exe וכו')

  • קובץ sshd_config (נוצר לאחר תחילת השירות הראשונה):

    C:\ProgramData\ssh
  • ניתן לאחסן את קובץ authorized_keys ואת המפתחות בתיקיית פרופיל המשתמש:

    %USERPROFILE%\.ssh\

Sshd_config: קובץ תצורת שרת OpenSSH

באפשרותך לשנות את הגדרות שרת OpenSSH בקובץ הקונפיגורציה:

%programdata%\ssh\sshd_config

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

start-process notepad C:\Programdata\ssh\sshd_config

לדוגמה, כדי למנוע חיבור SSH עבור חשבון משתמש תחום ספציפי (או כל המשתמשים בתחום שצוין), הוסף הוראות אלה לסוף הקובץ:

DenyUsers a-d\admin@192.168.1.10
DenyUsers corp\*

כדי לאפשר חיבור SSH לקבוצת האבטחה הספציפית של התחום בלבד:

AllowGroups a-d\sshadmins

באפשרותך לאפשר גישה לקבוצת משתמשים מקומית:

AllowGroups sshadmins

כברירת מחדל, כל משתמשי Windows יכולים להתחבר ל- OpenSSH. ההוראות בקבצי sshd_config מעובדות בסדר הבא: DenyUsers, AllowUsers, DenyGroups, AllowGroups.

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

DenyGroups Administrators

ההוראות הבאות מאפשרות לך לגשת ל- Windows באמצעות מפתחות פרטיים של SSH או סיסמה.

PubkeyAuthentication yes
PasswordAuthentication yes

באפשרותך לשנות את יציאת ברירת המחדל TCP/22 שבה מתקבלים חיבורי OpenSSH Server בקובץ התצורה של sshd_config באמצעות פקודת היציאה.

לאחר ביצוע שינויים כלשהם בקובץ sshd_config, עליך להפעיל מחדש את שירות sshd

restart-service sshd

כיצד להתחבר למחשב Windows מרוחק באמצעות SSH?

עכשיו אתה יכול לנסות להתחבר למחשב Windows 10 באמצעות לקוח SSH (אני משתמש מרק בדוגמה זו).

באפשרותך להשתמש בלקוח Windows SSH המוכלל כדי להתחבר למחשב מארח מרוחק. לשם כך, פתח את שורת הפקודה והפעל את הפקודה הבאה:

ssh max@192.168.13.12

בדוגמה זו, max הוא שם המשתמש במחשב Windows המרוחק, ו- 192.168.13.12 הוא כתובת ה- IP או שם ה- DNS של המחשב.

שים לב שבאפשרותך להשתמש בתבניות שם המשתמש הבאות בעת התחברות ל- Windows באמצעות SSH:

  • max@server1

    - משתמש Windows מקומי

  • max@a-d.site@server1

    - משתמש Active Directory או חשבון Microsoft/Azure (השתמש בתבנית UserPrincipalName)

  • a-d\max@server1

    - פורמט שם NetBIOS

בתחום Active Directory, באפשרותך להשתמש באימות Kerberos ב- SSH. לשם כך, עליך להפעיל את ההוראה הבאה ב- sshd_config:

GSSAPIAuthentication yes

כעת באפשרותך להתחבר באופן שקוף לשרת SSH ממחשב Windows המצורף לתחום עם הפעלת משתמש תחום. במקרה זה, סיסמת המשתמש לא תתבקש, ואימות SSO באמצעות Kerberos יבוצע:

ssh -K server1

בפעם הראשונה שתתחבר, תתבקש להוסיף את המחשב המארח לרשימת מארחי SSH הידועים (

C:\Users\your_user\.ssh\known_hosts

).

לחץ

Yes

והתחבר תחת חשבון המשתמש שלך ב- Windows.,

אם חיבור SSH מצליח, תראה את בקשת המעטפת cmd.exe.

admin@win10pc C:\Users\admin>

באפשרותך להפעיל פקודות, קבצי Script ויישומים שונים בשורת הפקודה של SSH.

אני מעדיף לעבוד במסוף PowerShell. כדי להפעיל אותו, הפעל:

powershell.exe

כדי לשנות את מעטפת cmd.exe ברירת המחדל ב- OpenSSH ל- PowerShell, בצע שינויים ברישום באמצעות הפקודה הבאה של PowerShell:

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

הפעל מחדש את חיבור SSH וודא ש- PowerShell משמש כעת כמעטפת SSH המוגדרת כברירת מחדל (הדבר מצוין על-ידי הפקודה

PS C:\Users\admin>

).

בקשת PowerShell הופעלה בהפעלת SSH שלי, שבה פועלות הפונקציות הרגילות: השלמה אוטומטית של טאבים, הדגשת תחביר PSReadLine, היסטוריית פקודות וכו '. אם המשתמש הנוכחי חבר בקבוצת מנהלי המערכת המקומית, כל פקודות ההפעלה מופעלות בצורה מוגבהת גם אם UAC זמין.

ניתן להשתמש בשרת OpenSSH ב- Windows בתרחישי מנהור SSH שונים.

בדיקת יומני חיבור SSH ב- Windows

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

eventvwr.msc

) ונווט אל יומני יישומים ושירותים -> OpenSSH -> Operational.

אם תתחבר בהצלחה לשרת SSH באמצעות סיסמה, יופיע אירוע ביומן:

EventID: 4
sshd: Accepted password for root from 192.168.1.53 port 65749 ssh2

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

sshd: Accepted publickey for locadm from 192.168.1.53 port 61426 
ssh2: ED25519 SHA256:FEHDEC/G42FS23209C2KMb4335923pigN31s3qMK322lGibD

אם ברצונך שיומני החיבור של SSH ייכתבו לקובץ טקסט מקומי, עליך להפעיל את הפרמטרים הבאים בקובץ sshd_config:

SyslogFacility LOCAL0
LogLevel INFO

הפעל מחדש את שירות sshd וודא שיומני הרישום של שרת SSH נכתבים כעת בקובץ טקסט רגיל C:\ProgramData\ssh\logs\sshd.log

באפשרותך להשתמש בחיבור SSH מאובטח עם PSRemoting כדי לנהל מחשבים מרוחקים באמצעות WinRM.