כיצד להפעיל ולהגדיר שרת 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, EnabledName 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.















