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-ზე.
კომენტარები
ჯერ არ არის კომენტარები. იყავით პირველი.