−25%

על Windows בתשלום שנתי, עד 31.10. לחבילות

EQVPS
התחלה

איך מתקינים OpenSSH Server ב-Windows Server 2022 (כניסה במפתח, PowerShell כמעטפת)

התקינו את OpenSSH Server המובנה ב-VPS עם Windows Server 2022, הפכו את PowerShell למעטפת ברירת המחדל, היכנסו במפתח כ-Administrator ובטלו כניסה בסיסמה. כולל שתי המלכודות של Windows שגורמות לכניסה במפתח להיכשל.

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.

שאלות נפוצות

למה SSH ב-Windows כשיש RDP?

סקריפטים וכלים מדברים SSH. עם OpenSSH על השרת מריצים פקודות PowerShell ממכונת Linux או ממשימת CI, מעתיקים קבצים עם scp ונותנים לאוטומציה לנהל את השרת בלי סשן שולחן עבודה.

המפתח שלי עובד למשתמש רגיל אבל לא ל-Administrator. למה?

לחברי הקבוצה Administrators, OpenSSH של Windows מתעלם מ-~/.ssh/authorized_keys וקורא את C:\ProgramData\ssh\administrators_authorized_keys. רק Administrators ו-SYSTEM צריכים להיות מסוגלים לכתוב בקובץ הזה, אחרת sshd מדלג עליו בשקט.

אפשר להגיע ל-SSH בתוכנית Windows עם NAT?

מבחוץ לא. בתוכנית Windows עם NAT הפורט החיצוני האישי מועבר ל-RDP (3389), וזו ההעברה הנכנסת היחידה. ל-SSH מהאינטרנט בחרו תוכנית Windows עם IPv4 משלה. בתוך השרת OpenSSH עדיין עובד לכלים מקומיים.

איזו גרסה של OpenSSH מתקין Windows Server 2022?

OpenSSH 8.1p1 for Windows. לכן הגדרות הסיסמה משתמשות ב-ChallengeResponseAuthentication ולא בשם החדש יותר KbdInteractiveAuthentication.

תגובות

אין עדיין תגובות. היו הראשונים.

השאירו תגובה

התגובות עוברות מודרציה לפני שהן מופיעות.