Windows Server 2022 כולל את OpenSSH Server כתכונה אופציונלית: בלי מתקין של צד שלישי, עם עדכונים דרך Windows Update. אחרי ההפעלה אפשר להריץ PowerShell דרך SSH, להעתיק קבצים עם scp ולכוון סקריפטים או CI לשרת כמו לכל מכונת Linux.
את כל מה שלמטה עשינו על אימג' Windows Server 2022 שלנו, ב-PowerShell עם הרשאות מנהל דרך RDP (איך מתחברים).
קודם הרשת. בתוכנית Windows עם NAT ההעברה הנכנסת היחידה הולכת ל-RDP, ולכן אי אפשר להגיע ל-SSH מהאינטרנט. ל-SSH מבחוץ צריך תוכנית עם IPv4 משלה, כמו Windows Small-IP. כשהפורט נגיש, הצעדים למטה לוקחים בערך חמש דקות.
1. התקינו את OpenSSH Server
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
הלקוח כבר מותקן; השרת מוצג כ-NotPresent עד שתוסיפו אותו. בשרת שלנו ההתקנה לקחה 28 שניות.
2. הפעילו את השירות והגדירו הפעלה עם האתחול
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*
התקנת התכונה יוצרת את כלל חומת האש OpenSSH-Server-In-TCP (פורט 22, נכנס, מותר), כך שאין צורך להוסיף כלל משלכם.
3. הפכו את PowerShell למעטפת ברירת המחדל
כברירת מחדל סשן SSH נפתח ב-cmd.exe. עברו ל-PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
חיבורים חדשים מקבלים PowerShell 5.1 מיד; אין צורך באתחול.
4. מפתח ל-Administrator: הקובץ שכולם נתקלים בו
זו המלכודת הראשונה של Windows. לחשבונות בקבוצה Administrators, sshd לא קורא את C:\Users\<name>\.ssh\authorized_keys. הוא קורא קובץ משותף אחד, C:\ProgramData\ssh\administrators_authorized_keys, ורק אם אף אחד מלבד Administrators ו-SYSTEM לא יכול לכתוב בו:
$pub = 'ssh-ed25519 AAAA...your-public-key... you@laptop'
Set-Content -Path C:\ProgramData\ssh\administrators_authorized_keys -Value $pub -Encoding ascii
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
גם -Encoding ascii חשוב. בבדיקה שלנו אותו מפתח, כשנשמר עם Out-File (UTF-16, ברירת המחדל של PowerShell 5.1), נדחה עם Permission denied (publickey). מהמחשב שלכם:
ssh Administrator@YOUR.SERVER.IP
אתם אמורים לקבל שורת פקודה של PowerShell בלי סיסמה. למשתמשים שאינם מנהלים עובד ה-C:\Users\<name>\.ssh\authorized_keys הרגיל.
5. בטלו כניסה בסיסמה: המלכודת השנייה
השינוי המתבקש, PasswordAuthentication no, לא מספיק בגרסה הזו. OpenSSH 8.1 עדיין מציע keyboard-interactive, שמבקש את אותה סיסמת Windows. בבדיקה שלנו כניסה בלי מפתח המשיכה להציג keyboard-interactive עד שכיבינו גם אותו. בנוסף, ההגדרה חייבת להופיע לפני בלוק Match Group administrators שבסוף הקובץ, אחרת היא חלה רק על מנהלים. הפקודה הזו מציבה את שתי השורות בראש הקובץ:
$cfg = 'C:\ProgramData\ssh\sshd_config'
$lines = Get-Content $cfg | Where-Object { $_ -notmatch '^#?\s*(PasswordAuthentication|KbdInteractiveAuthentication|ChallengeResponseAuthentication)\s' }
Set-Content $cfg -Value (@('PasswordAuthentication no', 'ChallengeResponseAuthentication no') + $lines) -Encoding ascii
Restart-Service sshd
השאירו את סשן ה-SSH הנוכחי פתוח ובדקו מטרמינל שני. ניסיון עם סיסמה בלבד אמור לקבל עכשיו:
Permission denied (publickey).
זו הייתה התוצאה בבדיקה שלנו גם ל-Administrator וגם למשתמש רגיל, בזמן שהכניסה במפתח המשיכה לעבוד.
מה אפשר לעשות עם זה
- להריץ פקודה מכל מקום:
ssh Administrator@IP 'Get-Service sshd'. - להעתיק קבצים:
scp .\app.zip Administrator@IP:C:/apps/. - להגביל את הפורט לכתובת שלכם, באותה שיטה כמו ב-RDP:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.
איזו תוכנית
SSH מבחוץ דורש IPv4 ציבורי: Windows Small-IP (4 vCPU, 4 GB, 50 GB) עולה $28 לחודש, Windows Medium-IP (6 vCPU, 6 GB) $36 לחודש. Windows הוא Server 2022 עם הרישיון שלכם (הסבר על BYOL). כל ארבע התוכניות בעמוד Windows VPS. כדי שתוכנה תמשיך לרוץ אחרי ניתוק, ראו הרצת סקריפט 24/7 ב-Windows Server.
תגובות
אין עדיין תגובות. היו הראשונים.