−25%

Windows-ის წლიურ გადახდაზე, 31 ოქტომბრამდე. ტარიფებზე

EQVPS
დაწყება

როგორ დავაყენოთ OpenSSH Server Windows Server 2022-ზე (შესვლა გასაღებით, PowerShell გარსი)

დააყენეთ ჩაშენებული OpenSSH Server Windows Server 2022 VPS-ზე, გახადეთ 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 ჯგუფის წევრებისთვის Windows-ის OpenSSH უგულებელყოფს ~/.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.

კომენტარები

ჯერ არ არის კომენტარები. იყავით პირველი.

დატოვეთ კომენტარი

კომენტარები მოდერირდება გამოჩენამდე.