Windows Server 2022 include OpenSSH Server ca funcție opțională: fără program de instalare terț, cu actualizări prin Windows Update. Odată activ, rulezi PowerShell prin SSH, copiezi fișiere cu scp și îndrepți scripturi sau CI spre server ca spre orice mașină Linux.
Tot ce urmează am făcut pe imaginea noastră Windows Server 2022, într-un PowerShell cu drepturi de administrator prin RDP (cum te conectezi).
Mai întâi, rețeaua. Pe un plan Windows cu NAT, singura redirecționare de intrare merge spre RDP, deci SSH nu este accesibil din internet. Pentru SSH din exterior îți trebuie un plan cu IPv4 propriu, de exemplu Windows Small-IP. Cu portul accesibil, pașii de mai jos durează aproximativ cinci minute.
1. Instalează OpenSSH Server
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Clientul este deja instalat; serverul apare ca NotPresent până îl adaugi. Pe serverul nostru instalarea a durat 28 de secunde.
2. Pornește-l și fă-l să pornească la boot
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*
Instalarea funcției creează regula de firewall OpenSSH-Server-In-TCP (portul 22, intrare, permisă), deci nu trebuie să adaugi una.
3. Fă din PowerShell shell-ul implicit
Implicit, o sesiune SSH ajunge în cmd.exe. Treci la PowerShell:
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force
Conexiunile noi primesc imediat PowerShell 5.1; nu e nevoie de repornire.
4. Cheia pentru Administrator: fișierul la care se împiedică toată lumea
Aceasta este prima capcană Windows. Pentru conturile din grupul Administrators, sshd nu citește C:\Users\<name>\.ssh\authorized_keys. Citește un fișier comun, C:\ProgramData\ssh\administrators_authorized_keys, și doar dacă nimeni în afară de Administrators și SYSTEM nu poate scrie în el:
$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"
Contează și -Encoding ascii. În testul nostru, aceeași cheie salvată cu Out-File (UTF-16, implicitul din PowerShell 5.1) a fost refuzată cu Permission denied (publickey). De pe calculatorul tău:
ssh Administrator@YOUR.SERVER.IP
Ar trebui să primești un prompt PowerShell fără parolă. Pentru utilizatorii fără drepturi de administrator funcționează obișnuitul C:\Users\<name>\.ssh\authorized_keys.
5. Dezactivează autentificarea cu parolă: a doua capcană
Modificarea evidentă, PasswordAuthentication no, nu ajunge în această versiune. OpenSSH 8.1 încă oferă keyboard-interactive, care cere aceeași parolă Windows. În testul nostru, o autentificare fără cheie afișa în continuare keyboard-interactive până când am dezactivat și asta. În plus, setarea trebuie să stea înainte de blocul Match Group administrators de la finalul fișierului, altfel se aplică doar administratorilor. Comanda aceasta pune ambele rânduri la început:
$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
Ține deschisă sesiunea SSH actuală și testează dintr-un al doilea terminal. O încercare doar cu parolă ar trebui acum să primească:
Permission denied (publickey).
Acesta a fost rezultatul în testul nostru atât pentru Administrator, cât și pentru un utilizator obișnuit, iar autentificarea cu cheie a continuat să meargă.
Ce poți face cu el
- Rulezi o comandă de oriunde:
ssh Administrator@IP 'Get-Service sshd'. - Copiezi fișiere:
scp .\app.zip Administrator@IP:C:/apps/. - Restricționezi portul la adresa ta, la fel ca pentru RDP:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.
Ce plan
SSH din exterior are nevoie de un IPv4 public: Windows Small-IP (4 vCPU, 4 GB, 50 GB) costă $28/lună, Windows Medium-IP (6 vCPU, 6 GB) $36/lună. Windows este Server 2022 cu propria ta licență (BYOL explicat). Toate cele patru planuri sunt pe pagina Windows VPS. Ca un program să ruleze și după ce te deconectezi, vezi un script 24/7 pe Windows Server.
Comentarii
Încă nu există comentarii. Fii primul.