−25%

روی پرداخت سالانه Windows، تا ۳۱ اکتبر. مشاهده پلن‌ها

EQVPS
شروع کنید

چگونه OpenSSH Server را روی Windows Server 2022 نصب کنیم (ورود با کلید، پوستهٔ PowerShell)

OpenSSH Server داخلی را روی VPS با Windows Server 2022 نصب کنید، PowerShell را پوستهٔ پیش‌فرض کنید، به‌عنوان Administrator با کلید وارد شوید و ورود با رمز را ببندید. همراه با دو تلهٔ ویندوزی که ورود با کلید را خراب می‌کنند.

Windows Server 2022 سرویس OpenSSH Server را به‌صورت قابلیت اختیاری دارد: بدون نصب‌کنندهٔ شخص ثالث و با به‌روزرسانی از Windows Update. پس از روشن کردن، می‌توانید PowerShell را از راه SSH اجرا کنید، با scp فایل کپی کنید و اسکریپت‌ها یا CI را مانند هر ماشین لینوکسی به سرور وصل کنید.

همهٔ کارهای زیر را روی ایمیج Windows Server 2022 خودمان، در PowerShell با دسترسی مدیر از راه RDP انجام دادیم (چگونه وصل شویم).

اول شبکه. در پلن ویندوزی با 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: فایلی که همه سرش گیر می‌کنند

این نخستین تلهٔ ویندوز است. برای حساب‌های گروه 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 را عرضه می‌کند که همان رمز ویندوز را می‌پرسد. در آزمون ما ورود بدون کلید تا وقتی آن را هم نبستیم، 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 است. ویندوز همان Server 2022 با مجوز خود شماست (توضیح BYOL). هر چهار پلن در صفحهٔ Windows VPS هستند. برای اینکه برنامه پس از قطع اتصال هم اجرا شود، اجرای اسکریپت 24/7 روی Windows Server را ببینید.

پرسش‌های متداول

وقتی RDP هست، چرا SSH روی ویندوز؟

اسکریپت‌ها و ابزارها با SSH حرف می‌زنند. با OpenSSH روی سرور، فرمان‌های PowerShell را از یک ماشین لینوکسی یا کار CI اجرا می‌کنید، فایل‌ها را با scp کپی می‌کنید و می‌گذارید خودکارسازی بدون نشست میزکار سرور را مدیریت کند.

کلیدم برای کاربر عادی کار می‌کند، اما برای Administrator نه. چرا؟

برای اعضای گروه Administrators، OpenSSH ویندوز فایل ~/.ssh/authorized_keys را نادیده می‌گیرد و C:\ProgramData\ssh\administrators_authorized_keys را می‌خواند. فقط Administrators و SYSTEM باید بتوانند در این فایل بنویسند، وگرنه sshd بی‌صدا از آن می‌گذرد.

آیا در پلن ویندوزی با NAT به SSH دسترسی دارم؟

از بیرون نه. در پلن ویندوزی با NAT، درگاه بیرونی شخصی به RDP (3389) هدایت شده و این تنها هدایت ورودی است. برای SSH از اینترنت، پلن ویندوزی با IPv4 اختصاصی بگیرید. درون سرور، OpenSSH برای ابزارهای محلی همچنان کار می‌کند.

Windows Server 2022 کدام نسخهٔ OpenSSH را نصب می‌کند؟

OpenSSH 8.1p1 for Windows. به همین دلیل تنظیمات رمز از ChallengeResponseAuthentication استفاده می‌کنند، نه از نام تازه‌تر KbdInteractiveAuthentication.

نظرات

هنوز نظری نیست. اولین نفر باشید.

یک نظر بگذارید

نظرات پیش از نمایش بررسی می‌شوند.