−25%

su Windows con pagamento annuale, fino al 31/10. Vai ai piani

EQVPS
Inizia

Come installare OpenSSH Server su Windows Server 2022 (accesso con chiave, shell PowerShell)

Installa l'OpenSSH Server integrato su un VPS Windows Server 2022, imposta PowerShell come shell predefinita, accedi con chiave come Administrator e disattiva l'accesso via password. Con le due trappole di Windows che fanno fallire l'accesso con chiave.

Windows Server 2022 include OpenSSH Server come funzionalità facoltativa: nessun installer di terze parti, aggiornamenti tramite Windows Update. Una volta attivo puoi eseguire PowerShell via SSH, copiare file con scp e collegare script o CI al server come a qualsiasi macchina Linux.

Tutto ciò che segue è stato fatto sulla nostra immagine Windows Server 2022, in un PowerShell con privilegi di amministratore via RDP (come connettersi).

Prima la rete. Su un piano Windows NAT l'unico inoltro in ingresso va a RDP, quindi SSH non è raggiungibile da Internet. Per SSH dall'esterno serve un piano con IPv4 propria, come Windows Small-IP. Con la porta raggiungibile, i passi richiedono circa cinque minuti.

1. Installa OpenSSH Server

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Il client è già installato; il server risulta NotPresent finché non lo aggiungi. Sul nostro server l'installazione ha richiesto 28 secondi.

2. Avvialo e fallo partire all'avvio

Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
Get-NetFirewallRule -Name *OpenSSH*

L'installazione della funzionalità crea la regola firewall OpenSSH-Server-In-TCP (porta 22, in ingresso, consentita), quindi non devi aggiungerne una.

3. Imposta PowerShell come shell predefinita

Per impostazione predefinita una sessione SSH finisce in cmd.exe. Passa a PowerShell:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Le nuove connessioni ottengono subito PowerShell 5.1, senza riavvio.

4. Aggiungi la chiave per Administrator: il file su cui inciampano tutti

È la prima trappola di Windows. Per gli account del gruppo Administrators, sshd non legge C:\Users\<name>\.ssh\authorized_keys. Legge un file condiviso, C:\ProgramData\ssh\administrators_authorized_keys, e solo se nessuno oltre ad Administrators e SYSTEM può scriverci:

$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"

Conta anche -Encoding ascii. Nel nostro test la stessa chiave salvata con Out-File (UTF-16, il predefinito di PowerShell 5.1) è stata rifiutata con Permission denied (publickey). Dal tuo computer:

ssh Administrator@YOUR.SERVER.IP

Dovresti ottenere un prompt di PowerShell senza password. Per gli utenti non amministratori funziona il solito C:\Users\<name>\.ssh\authorized_keys.

5. Disattiva l'accesso via password: la seconda trappola

La modifica ovvia, PasswordAuthentication no, non basta in questa versione. OpenSSH 8.1 continua a offrire keyboard-interactive, che chiede la stessa password di Windows. Nel nostro test un accesso senza chiave mostrava ancora keyboard-interactive finché non l'abbiamo disattivato. Inoltre l'impostazione deve stare prima del blocco Match Group administrators in fondo al file, altrimenti vale solo per gli amministratori. Questo mette entrambe le righe in cima:

$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

Tieni aperta la sessione SSH attuale e prova da un secondo terminale. Un tentativo con sola password ora deve ricevere:

Permission denied (publickey).

È ciò che abbiamo ottenuto sia per Administrator sia per un utente normale, mentre l'accesso con chiave continuava a funzionare.

Cosa puoi farci

  • Eseguire un comando da ovunque: ssh Administrator@IP 'Get-Service sshd'.
  • Copiare file: scp .\app.zip Administrator@IP:C:/apps/.
  • Limitare la porta al tuo indirizzo, come per RDP: Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -RemoteAddress 203.0.113.10.

Quale piano

SSH dall'esterno richiede un IPv4 pubblico: Windows Small-IP (4 vCPU, 4 GB, 50 GB) costa $28/mese, Windows Medium-IP (6 vCPU, 6 GB) $36/mese. Windows è Server 2022 con la tua licenza (il BYOL spiegato). Tutti e quattro i piani sono nella pagina Windows VPS. Per tenere un programma in esecuzione dopo la disconnessione, vedi eseguire uno script 24/7 su Windows Server.

FAQ

Perché SSH su Windows se c'è già RDP?

Script e strumenti parlano SSH. Con OpenSSH sul server esegui comandi PowerShell da una macchina Linux o da un job di CI, copi file con scp e lasci che l'automazione gestisca il server senza una sessione desktop.

La mia chiave funziona per un utente normale ma non per Administrator. Perché?

Per i membri del gruppo Administrators, OpenSSH di Windows ignora ~/.ssh/authorized_keys e legge C:\ProgramData\ssh\administrators_authorized_keys. Quel file deve essere scrivibile solo da Administrators e SYSTEM, altrimenti sshd lo salta senza avvisare.

Posso raggiungere SSH su un piano Windows NAT?

Dall'esterno no. Su un piano Windows NAT la porta esterna personale è inoltrata a RDP (3389), ed è l'unico inoltro in ingresso. Per SSH da Internet scegli un piano Windows con IPv4 propria. Dentro il server OpenSSH funziona comunque per gli strumenti locali.

Quale versione di OpenSSH installa Windows Server 2022?

OpenSSH 8.1p1 for Windows. Per questo le impostazioni sulla password usano ChallengeResponseAuthentication e non il nome più recente KbdInteractiveAuthentication.

Commenti

Ancora nessun commento. Sii il primo.

Lascia un commento

I commenti sono moderati prima di comparire.