Windows Server 2022 ma OpenSSH Server jako funkcję opcjonalną: bez instalatorów zewnętrznych, z aktualizacjami przez Windows Update. Po włączeniu uruchamiasz PowerShell przez SSH, kopiujesz pliki przez scp i kierujesz skrypty lub CI na serwer jak na każdą maszynę z Linuksem.
Wszystko poniżej zrobiliśmy na naszym obrazie Windows Server 2022, w PowerShell z uprawnieniami administratora przez RDP (jak się połączyć).
Najpierw sieć. Na planie Windows z NAT jedyne przekierowanie przychodzące prowadzi do RDP, więc SSH nie jest osiągalny z internetu. Do SSH z zewnątrz potrzebujesz planu z własnym IPv4, na przykład Windows Small-IP. Gdy port jest osiągalny, kroki poniżej zajmują około pięciu minut.
1. Zainstaluj OpenSSH Server
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Klient jest już zainstalowany; serwer ma stan NotPresent, dopóki go nie dodasz. Na naszym serwerze instalacja trwała 28 sekund.
2. Uruchom usługę i włącz autostart
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*
Instalacja funkcji tworzy regułę zapory OpenSSH-Server-In-TCP (port 22, przychodzące, dozwolone), więc nie dodajesz własnej.
3. Ustaw PowerShell jako domyślną powłokę
Domyślnie sesja SSH trafia do cmd.exe. Przełącz na PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Nowe połączenia od razu dostają PowerShell 5.1; restart nie jest potrzebny.
4. Klucz dla Administratora: plik, na którym potyka się każdy
To pierwsza pułapka Windows. Dla kont z grupy Administrators sshd nie czyta C:\Users\<name>\.ssh\authorized_keys. Czyta jeden wspólny plik C:\ProgramData\ssh\administrators_authorized_keys i tylko wtedy, gdy nikt poza Administrators i SYSTEM nie może do niego pisać:
$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"
Liczy się też -Encoding ascii. W naszym teście ten sam klucz zapisany przez Out-File (UTF-16, domyślne w PowerShell 5.1) był odrzucany z Permission denied (publickey). Ze swojego komputera:
ssh Administrator@YOUR.SERVER.IP
Powinieneś dostać znak zachęty PowerShell bez hasła. Dla użytkowników bez uprawnień administratora działa zwykły C:\Users\<name>\.ssh\authorized_keys.
5. Wyłącz logowanie hasłem: druga pułapka
Oczywista zmiana PasswordAuthentication no w tej wersji nie wystarcza. OpenSSH 8.1 nadal oferuje keyboard-interactive, które pyta o to samo hasło Windows. W naszym teście logowanie bez klucza wciąż pokazywało keyboard-interactive, dopóki tego też nie wyłączyliśmy. Ponadto ustawienie musi stać przed blokiem Match Group administrators na końcu pliku, inaczej dotyczy tylko administratorów. To polecenie wstawia obie linie na początek:
$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
Nie zamykaj bieżącej sesji SSH i sprawdź z drugiego terminala. Próba samym hasłem powinna teraz dostać:
Permission denied (publickey).
Tak było w naszym teście dla Administratora i zwykłego użytkownika, a logowanie kluczem działało dalej.
Co możesz z tym robić
- Uruchomić polecenie skądkolwiek:
ssh Administrator@IP 'Get-Service sshd'. - Kopiować pliki:
scp .\app.zip Administrator@IP:C:/apps/. - Ograniczyć port do swojego adresu, tak jak dla RDP:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.
Jaki plan
SSH z zewnątrz wymaga publicznego IPv4: Windows Small-IP (4 vCPU, 4 GB, 50 GB) kosztuje $28/mies., Windows Medium-IP (6 vCPU, 6 GB) $36/mies. Windows to Server 2022 z twoją licencją (czym jest BYOL). Wszystkie cztery plany są na stronie Windows VPS. Aby program działał po rozłączeniu, zobacz skrypt 24/7 na Windows Server.
Komentarze
Brak komentarzy. Bądź pierwszy.