Aggiornare OpenSSH a 9.8 su Windows Server 2016: come farlo davvero (ZIP/MSI, sicurezza, alternative)

Hai OpenSSH 9.2 su Windows Server 2016 e vuoi “forzare” l’upgrade alla 9.8? In questa guida aggiornata scopri cosa è realmente possibile oggi, come installare in sicurezza l’ultima build disponibile (ZIP o MSI), e quali alternative hai se ti serve proprio la 9.8 “piena”.

Indice

Panoramica della domanda

Scenario tipico: un amministratore ha Win32-OpenSSH 9.2 già presente su Windows Server 2016 e chiede come passare a 9.8. Il dubbio è se esista un modo per “forzare” l’aggiornamento come avviene con le Feature on Demand (FoD) dei sistemi più recenti.

Contesto: OpenSSH su Windows (2016 vs 2019/2022/2025)

  • Windows Server 2016 non include OpenSSH di serie. Su questa piattaforma l’installazione è manuale (pacchetti Win32‑OpenSSH). :contentReference[oaicite:0]{index=0}
  • Windows Server 2019 e 2022 offrono OpenSSH come Feature on Demand installabile con GUI/PowerShell (Add‑WindowsCapability). :contentReference[oaicite:1]{index=1}
  • Windows Server 2025 installa OpenSSH per impostazione predefinita (il servizio sshd va solo abilitato). :contentReference[oaicite:2]{index=2}

Implicazione pratica per Server 2016: non esistono meccanismi di “force upgrade” via Windows Update/FoD. Gli aggiornamenti passano necessariamente dai pacchetti rilasciati dal progetto Win32‑OpenSSH (ZIP/MSI) o da una compilazione manuale.

Disponibilità delle versioni: cosa c’è davvero oggi

Il progetto Win32‑OpenSSH pubblica i rilasci su GitHub. Al momento della stesura, l’ultima pre‑release è la v9.8.3.0p2‑Preview, che include asset per Windows a 64 bit sia in formato .zip sia in .msi (OpenSSH‑Win64.zip, OpenSSH‑Win64‑v9.8.3.0.msi). La dicitura “Preview” indica che non è considerata production‑ready. :contentReference[oaicite:3]{index=3}

Nota terminologica: dalla serie 9.8 in poi la nomenclatura è passata da “Beta” a “Preview” per allinearsi alle policy di denominazione, senza che questo implichi una “GA” stabile. :contentReference[oaicite:4]{index=4}

Si può quindi “forzare” l’upgrade alla 9.8 su Server 2016?

Sì, ma solo installando la preview 9.8.x dei binari Windows oppure compilando il progetto per conto proprio. In altri termini: non esiste un “force upgrade” lato OS come per le FoD, e non esiste (al momento) un pacchetto marcato stabile/GA più recente di quei preview. :contentReference[oaicite:5]{index=5}

Qual è la strada più sicura?

Per ambienti produttivi su Windows Server 2016 la pratica più prudente è:

  1. Restare su una build precedente e collaudata finché la 9.8.x non verrà promossa o finché non la validi in laboratorio.
  2. Se devi mitigare vulnerabilità note, sappi che le preview 9.8.2/9.8.3 includono fix di sicurezza backportati da OpenSSH 9.9p2; valutarle può avere senso, ma richiede test rigorosi. :contentReference[oaicite:6]{index=6}

Tabella di orientamento rapido

PiattaformaCome si installa/aggiornaVersioni tipiche disponibiliNote operative
Windows Server 2016Pacchetti Win32‑OpenSSH (ZIP/MSI)Fino alle preview 9.8.x (ZIP/MSI)Installa/aggiorna manualmente; test consigliati prima della produzione. :contentReference[oaicite:7]{index=7}
Windows Server 2019/2022Feature on Demand (Add‑WindowsCapability)Versione veicolata da Windows Update (spesso più conservativa)Comodo, ma può laggare rispetto all’upstream. :contentReference[oaicite:8]{index=8}
Windows Server 2025OpenSSH installato per default; abilita/gestisci sshdVersione in-boxAttiva il servizio e verifica le regole firewall. :contentReference[oaicite:9]{index=9}

Procedura consigliata su Server 2016 (upgrade o installazione pulita all’ultima build disponibile)

Di seguito una procedura robusta che funziona sia per aggiornare 9.2 → 9.8.x (preview) sia per una clean install. Le istruzioni si basano sulla Win32‑OpenSSH Wiki. :contentReference[oaicite:10]{index=10}

Pre‑check & backup

  1. Finestra di manutenzione pianificata: l’upgrade comporta un riavvio del servizio sshd.
  2. Versione corrente: ssh -V (Get-Service sshd -ErrorAction SilentlyContinue) | Format-List *
  3. Backup configurazioni e chiavi: # Esegui come Admin Stop-Service sshd -ErrorAction SilentlyContinue Stop-Service ssh-agent -ErrorAction SilentlyContinue $ts = Get-Date -Format yyyyMMdd-HHmm New-Item -ItemType Directory -Path "C:\Backup-OpenSSH-$ts" | Out-Null Copy-Item -Recurse -Force "C:\ProgramData\ssh" "C:\Backup-OpenSSH-$ts\ssh-ProgramData" -ErrorAction SilentlyContinue Copy-Item -Recurse -Force "C:\Program Files\OpenSSH" "C:\Backup-OpenSSH-$ts\OpenSSH-ProgramFiles" -ErrorAction SilentlyContinue
  4. Firewall: verifica/crea la regola TCP 22 se non esiste. if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue)) { New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' ` -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 }

Metodo A — Installazione/upgrade con ZIP (classico)

  1. Scarica l’archivio più recente per Windows a 64 bit (OpenSSH‑Win64.zip) dalla pagina Releases di Win32‑OpenSSH. :contentReference[oaicite:11]{index=11}
  2. Estrai in C:\Program Files\OpenSSH (sovrascrivendo i binari se stai aggiornando).
  3. Registra i servizi: cd 'C:\Program Files\OpenSSH' powershell.exe -ExecutionPolicy Bypass -File .\install-sshd.ps1 .\ssh-keygen.exe -A # genera le chiavi host se mancano .\FixHostFilePermissions.ps1 -Confirm:$false .\FixUserFilePermissions.ps1 -Confirm:$false Nota: gli script di fix permissions sono inclusi nei pacchetti e servono a evitare i classici errori di avvio dovuti a permessi non corretti su sshd_config e chiavi. :contentReference[oaicite:12]{index=12}
  4. Aggiungi C:\Program Files\OpenSSH al SYSTEM PATH se non presente (necessario per scp/sftp in alcuni scenari). :contentReference[oaicite:13]{index=13}
  5. Imposta l’avvio automatico e avvia: Set-Service -Name sshd -StartupType Automatic Start-Service sshd Start-Service ssh-agent
  6. Verifica: ssh -V # atteso: OpenSSHforWindows_9.8pX ... Get-Service sshd

Metodo B — Installazione/upgrade con MSI (quando disponibile)

  1. Scarica l’MSI OpenSSH‑Win64‑v9.8.x.y.msi dalla Release corrente. :contentReference[oaicite:14]{index=14}
  2. Installa (interattivo o silente): # Interattivo msiexec /i C:\Temp\OpenSSH-Win64-v9.8.3.0.msi Silente, solo Server + Client msiexec /i C:\Temp\OpenSSH-Win64-v9.8.3.0.msi ADDLOCAL=Server,Client /qn
  3. Post‑install: verifica PATH e, se necessario, esegui gli script di fix permissions come nel Metodo A. :contentReference[oaicite:15]{index=15}
  4. Avvio e test come sopra.

Domanda chiave: mi serve proprio la 9.8?

Se i tuoi requisiti di sicurezza o compatibilità ti impongono la 9.8 (ad esempio per allineamento a standard interni o per i fix backportati dalla 9.9p2), hai tre strade:

  • Usare la 9.8.x Preview per Windows (ZIP/MSI), con test in laboratorio e piano di rollback. :contentReference[oaicite:16]{index=16}
  • Compilare dai sorgenti la versione desiderata dal fork openssh‑portable, seguendo le istruzioni di build del progetto (richiede Visual Studio e dimestichezza con toolchain Windows). :contentReference[oaicite:17]{index=17}
  • Valutare un salto di piattaforma (Server 2019/2022 con FoD, o Server 2025) per una gestione più “integrata” dell’aggiornamento, ricordando però che la versione FoD può essere più conservativa rispetto all’upstream. :contentReference[oaicite:18]{index=18}

Checklist completa (prima/durante/dopo)

  • Prima: apri finestra di manutenzione; informa gli utenti; prendi backup di C:\ProgramData\ssh e C:\Program Files\OpenSSH; verifica che la porta 22 sia libera (Get‑NetTCPConnection -LocalPort 22); disattiva scansioni AV/EDR in tempo reale sulla cartella durante l’upgrade.
  • Durante: ferma sshd/ssh‑agent; sostituisci i binari; registra i servizi; esegui FixHostFilePermissions.ps1 e FixUserFilePermissions.ps1; imposta StartupType su Automatic; conferma la regola firewall. :contentReference[oaicite:19]{index=19}
  • Dopo: controlla ssh -V, Get‑Service sshd; esegui un login di prova con utente non amministratore; monitora il Windows Event Log (Applications and Services Logs → OpenSSH) per 24–48h.

Risoluzione problemi (errori comuni)

  • Errore 1067 all’avvio del servizio: quasi sempre permessi errati su sshd_config o chiavi in C:\ProgramData\ssh. Esegui i due script di fix permissions e riprova. :contentReference[oaicite:20]{index=20}
  • Porta 22 occupata: libera la porta o cambia Port in sshd_config e riavvia.
  • sshd parte ma non accetti connessioni: verifica la regola firewall “OpenSSH‑Server‑In‑TCP” (creala se assente). :contentReference[oaicite:21]{index=21}
  • Chiavi host mancanti: esegui ssh-keygen -A da C:\Program Files\OpenSSH. :contentReference[oaicite:22]{index=22}
  • PATH non aggiornato: se scp/sftp non sono trovati, aggiungi C:\Program Files\OpenSSH al SYSTEM PATH. :contentReference[oaicite:23]{index=23}

Strategie per ridurre il downtime

  1. Blocco accessi temporaneo: in sshd_config applica una restriction temporanea (es. DenyUsers * o Match selettivo), riavvia, aggiorna, poi ripristina.
  2. Upgrade “in place” rapido: prepara tutto (binari estratti, comandi pronti), ferma il servizio, sostituisci file, esegui gli script di fix e riavvia. Tempo tipico: decine di secondi.
  3. Fallback: conserva la cartella dei vecchi binari rinominata (es. OpenSSH.backup) per ripristino lampo in caso di regressioni.

Sicurezza e compatibilità

  • Algoritmi e impostazioni: versioni recenti possono inasprire le preimpostazioni di cifre/KEX/MAC. Prima di passare in produzione, verifica con: ssh -Q kex, ssh -Q cipher, ssh -Q mac e adegua eventuali client obsoleti.
  • Fix recenti: le preview della 9.8.x hanno incluso fix per CVE di upstream 9.9p2 (ad esempio CVE‑2025‑26465/26466, e una correzione in ssh‑agent). Valuta il trade‑off tra stabilità e sicurezza. :contentReference[oaicite:24]{index=24}
  • Hardening: applica regole minime in sshd_config (es. PasswordAuthentication no, PubkeyAuthentication yes, AllowGroups/AllowUsers mirati, logging adeguato) e monitora i log.

Alternative quando la 9.8 è un requisito non negoziabile

  • Compilazione da sorgenti: clona il fork PowerShell/openssh‑portable al tag desiderato e compila con Visual Studio; la wiki del progetto copre il percorso di build (LibreSSL, ecc.). È una strada per team con competenze di sviluppo. :contentReference[oaicite:25]{index=25}
  • Upgrade dell’OS: migrare a Server 2019/2022 (FoD) o Server 2025 (in‑box) semplifica installazione e gestione di OpenSSH nel lungo periodo. :contentReference[oaicite:26]{index=26}
  • Jump host dedicato: se l’applicativo deve restare su 2016, valuta un bastion Linux/Windows moderno che esponga una versione più nuova di OpenSSH e faccia da ponte di accesso.

Nota di pianificazione: ciclo di vita di Windows Server 2016

Server 2016 è in Extended Support fino al 12 gennaio 2027. Se il server è strategico, conviene pianificare già oggi un percorso di aggiornamento/migrazione. :contentReference[oaicite:27]{index=27}

FAQ essenziale

Perché non vedo una 9.8 “stabile” per Windows?
Il repository Win32‑OpenSSH pubblica spesso preview per Windows; le etichette “GA” sono rare. Questo non impedisce l’uso in produzione, ma implica test e valutazioni di rischio più stringenti. :contentReference[oaicite:28]{index=28}

Posso usare Winget per aggiornare?
Su Server 2016 non sempre è disponibile/pratico; i metodi ZIP/MSI restano i più lineari. Per 2019/2022/2025, invece, le FoD gestite da Windows Update possono bastare. :contentReference[oaicite:29]{index=29}

Quanto cambia la configurazione passando da 9.2 a 9.8?
La tua sshd_config resta valida nella maggior parte dei casi, ma verifica algoritmi ammessi e le policy di autenticazione. Esegui sempre backup e test in laboratorio prima del rollout.

Procedura riassunta (quick start)

  1. Fai backup di C:\ProgramData\ssh e C:\Program Files\OpenSSH.
  2. Scarica l’ultima preview 9.8.x per Windows (ZIP o MSI). :contentReference[oaicite:30]{index=30}
  3. Installa con ZIP+script (install‑sshd.ps1, ssh‑keygen -A, FixHost…) o via MSI. :contentReference[oaicite:31]{index=31}
  4. Abilita e avvia sshd, verifica firewall, conferma con ssh -V. :contentReference[oaicite:32]{index=32}
  5. Monitora i log e tieni pronto il rollback.

Conclusioni

Su Windows Server 2016 non esiste un pulsante di “force upgrade” a OpenSSH 9.8. Puoi però: (1) installare l’ultima preview 9.8.x (ZIP o MSI) con le dovute cautele, (2) compilare i binari alla versione voluta, oppure (3) aggiornare l’OS per beneficiare di un’integrazione più semplice via FoD/in‑box. La procedura passo‑passo sopra è valida tanto per un’installazione pulita quanto per un upgrade e, soprattutto, è ripetibile alla prossima release.


Appendice – Script di esempio per upgrade ZIP non presidiato (metti il pacchetto in C:\Temp\OpenSSH‑Win64.zip):

# Esegui come Amministratore in PowerShell
$Pkg = 'C:\Temp\OpenSSH-Win64.zip'
$Dest = 'C:\Program Files\OpenSSH'

Stop-Service sshd -ErrorAction SilentlyContinue
Stop-Service ssh-agent -ErrorAction SilentlyContinue

Backup rapido

$ts = Get-Date -Format yyyyMMdd-HHmm
Copy-Item -Recurse -Force 'C:\ProgramData\ssh' "C:\Backup-OpenSSH-$ts\ssh-ProgramData" -ErrorAction SilentlyContinue
Copy-Item -Recurse -Force $Dest "C:\Backup-OpenSSH-$ts\OpenSSH-ProgramFiles" -ErrorAction SilentlyContinue

Estrazione

if (Test-Path $Dest) { $null = Remove-Item -Recurse -Force "$Dest*" }
Add-Type -AssemblyName System.IO.Compression.FileSystem
[System.IO.Compression.ZipFile]::ExtractToDirectory($Pkg, $Dest)

Registrazione servizi e fix permessi

Push-Location $Dest
powershell.exe -ExecutionPolicy Bypass -File .\install-sshd.ps1
.\ssh-keygen.exe -A
.\FixHostFilePermissions.ps1 -Confirm:$false
.\FixUserFilePermissions.ps1 -Confirm:$false
Pop-Location

Avvio e verifica

Set-Service -Name sshd -StartupType Automatic
Start-Service sshd
Start-Service ssh-agent
ssh -V 

Fonti principali: documentazione Microsoft su OpenSSH per Windows (stato FoD/in‑box e guida all’uso), pagina Releases di Win32‑OpenSSH (disponibilità di asset ZIP/MSI 9.8.x e stato “Preview”), note di rilascio OpenSSH 9.9p2 (contesto dei fix di sicurezza), wiki ufficiale per installazione e script di correzione permessi. :contentReference[oaicite:33]{index=33}


In sintesi: finché i manutentori non pubblicano un pacchetto Windows etichettato come stabile, su Server 2016 puoi arrivare al massimo alla serie 9.8.x Preview (o costruire i binari a mano). La procedura in questa guida resta valida anche per le release future quando diventeranno disponibili. :contentReference[oaicite:34]{index=34}

Indice