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”.
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 è:
- Restare su una build precedente e collaudata finché la 9.8.x non verrà promossa o finché non la validi in laboratorio.
- 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
Piattaforma | Come si installa/aggiorna | Versioni tipiche disponibili | Note operative |
---|---|---|---|
Windows Server 2016 | Pacchetti 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/2022 | Feature 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 2025 | OpenSSH installato per default; abilita/gestisci sshd | Versione in-box | Attiva 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
- Finestra di manutenzione pianificata: l’upgrade comporta un riavvio del servizio
sshd
. - Versione corrente:
ssh -V (Get-Service sshd -ErrorAction SilentlyContinue) | Format-List *
- 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
- 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)
- Scarica l’archivio più recente per Windows a 64 bit (
OpenSSH‑Win64.zip
) dalla pagina Releases di Win32‑OpenSSH. :contentReference[oaicite:11]{index=11} - Estrai in
C:\Program Files\OpenSSH
(sovrascrivendo i binari se stai aggiornando). - 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 susshd_config
e chiavi. :contentReference[oaicite:12]{index=12} - Aggiungi
C:\Program Files\OpenSSH
al SYSTEM PATH se non presente (necessario perscp
/sftp
in alcuni scenari). :contentReference[oaicite:13]{index=13} - Imposta l’avvio automatico e avvia:
Set-Service -Name sshd -StartupType Automatic Start-Service sshd Start-Service ssh-agent
- Verifica:
ssh -V # atteso: OpenSSHforWindows_9.8pX ... Get-Service sshd
Metodo B — Installazione/upgrade con MSI
(quando disponibile)
- Scarica l’MSI
OpenSSH‑Win64‑v9.8.x.y.msi
dalla Release corrente. :contentReference[oaicite:14]{index=14} - 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
- Post‑install: verifica PATH e, se necessario, esegui gli script di fix permissions come nel Metodo A. :contentReference[oaicite:15]{index=15}
- 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
eC:\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; eseguiFixHostFilePermissions.ps1
eFixUserFilePermissions.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 inC:\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
insshd_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
daC:\Program Files\OpenSSH
. :contentReference[oaicite:22]{index=22} - PATH non aggiornato: se
scp
/sftp
non sono trovati, aggiungiC:\Program Files\OpenSSH
al SYSTEM PATH. :contentReference[oaicite:23]{index=23}
Strategie per ridurre il downtime
- Blocco accessi temporaneo: in
sshd_config
applica una restriction temporanea (es.DenyUsers *
oMatch
selettivo), riavvia, aggiorna, poi ripristina. - 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.
- 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)
- Fai backup di
C:\ProgramData\ssh
eC:\Program Files\OpenSSH
. - Scarica l’ultima preview 9.8.x per Windows (ZIP o MSI). :contentReference[oaicite:30]{index=30}
- Installa con ZIP+script (
install‑sshd.ps1
,ssh‑keygen -A
,FixHost…
) o via MSI. :contentReference[oaicite:31]{index=31} - Abilita e avvia
sshd
, verifica firewall, conferma conssh -V
. :contentReference[oaicite:32]{index=32} - 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}