Installazione, test e disinstallazione di un server SFTP basato su OpenSSH in Windows
Questa guida si applica a Windows Server 2019, 2022 e 2025, che includono OpenSSH Server come funzionalità opzionale integrata. Non è richiesto alcun download di terze parti.
Guida passo passo
Installazione della funzionalità OpenSSH Server
1) Avviare PowerShell come amministratore: Avvio, digitare "PowerShell" → fare clic con il pulsante destro del mouse su "PowerShell" → Esegui come amministratore.
2) Verificare se la funzionalità OpenSSH Server è già installata:
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | Select-Object Name, State

Nota: Vengono elencati sia OpenSSH.Client sia OpenSSH.Server. Assicurarsi di verificare in particolare lo stato di OpenSSH.Server, il componente client potrebbe essere già installato e non è quello trattato in questa guida.
Se OpenSSH.Server mostra lo stato State : NotPresent, installarlo:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Nota: Windows installa la funzionalità integrata OpenSSH Server in C:\Windows\System32\OpenSSH\. Non installare OpenSSH manualmente direttamente in C:\Windows, ciò viola le convenzioni sulle directory di Windows e può causare problemi di autorizzazioni.
3) Avviare il servizio sshd e impostarlo per l'avvio automatico:
Start-Service sshd Set-Service -Name sshd -StartupType 'Automatic'
4) Verificare che il servizio sia in esecuzione:
Get-Service sshd

Il campo Status dovrebbe mostrare Running. Per confermare anche che il tipo di avvio sia impostato su Automatic:
Get-CimInstance Win32_Service -Filter "Name='sshd'" | Select-Object StartMode

5) Verificare il percorso del binario di OpenSSH installato e le informazioni sulla versione:
Get-Command sshd | Select-Object Source (Get-Command sshd).FileVersionInfo

Il campo Source conferma che il percorso di installazione corrisponde a C:\Windows\System32\OpenSSH\sshd.exe; FileVersionInfo mostra la versione di OpenSSH (ad esempio, OpenSSH_8.1p1, FileVersion 8.1.0.1 su Windows Server 2022).
Apertura della porta del firewall
Per impostazione predefinita, l'installazione della funzionalità OpenSSH Server normalmente crea automaticamente una regola firewall in entrata denominata OpenSSH-Server-In-TCP. Confermare che esista e sia abilitata:
Get-NetFirewallRule -Name *OpenSSH-Server*

Se la regola è assente, crearla manualmente (notare il nome della regola diverso, questa regola creata manualmente è separata dalla regola OpenSSH-Server-In-TCP generata automaticamente):
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
Verificare che la porta sia effettivamente aperta e in ascolto:
Test-NetConnection -ComputerName localhost -Port 22

Un risultato TcpTestSucceeded : True conferma che il servizio è in ascolto localmente. Questo non conferma che il firewall stia lasciando passare il traffico dall'esterno, per verificarlo completamente, eseguire lo stesso comando da un'altra macchina della rete, sostituendo localhost con l'indirizzo IP del server.
Configurazione di sshd_config per SFTP
Il file di configurazione si trova in:
C:\ProgramData\ssh\sshd_config
Aprirlo in un editor di testo con diritti di amministratore (ad esempio, Notepad eseguito come amministratore) e verificare che le seguenti impostazioni siano presenti (o configurate secondo necessità):
Port 22 PasswordAuthentication yes Subsystem sftp sftp-server.exe

Nota sulla sicurezza: PasswordAuthentication yes è mostrato qui per mantenere semplice questa guida, ma per un server di produzione esposto a Internet, l'autenticazione basata su chiavi con PasswordAuthentication no è la scelta più sicura. Vedere l'impostazione opzionale AuthorizedKeysFile più avanti se si intende utilizzare l'autenticazione basata su chiavi.
Importante: La riga Subsystem sftp definisce quale binario gestisce le sessioni SFTP. Senza questa riga presente e non commentata, le connessioni SSH funzioneranno, ma il trasferimento di file SFTP avrà esito negativo.
Per impostazione predefinita, questa riga è già presente e non commentata nel file di configurazione della funzionalità integrata. Se è assente o commentata con #, aggiungerla o rimuovere il commento, quindi salvare il file.
Nota: Le versioni più recenti di OpenSSH supportano anche Subsystem sftp internal-sftp, un gestore integrato che non richiama un binario esterno:
Subsystem sftp internal-sftp
Sia sftp-server.exe sia internal-sftp funzionano; questa guida utilizza sftp-server.exe poiché è il valore fornito per impostazione predefinita.
Impostazioni opzionali che si potrebbe voler includere anche in sshd_config:
# Valore predefinito, gia impostato; mostrato qui come riferimento se l'autenticazione basata su chiavi non funziona # AuthorizedKeysFile .ssh/authorized_keys # Limitare l'accesso a utenti specifici (opzionale) # AllowUsers username1 username2 # Registrazione SyslogFacility LOCAL0 LogLevel INFO
Nota: Per gli account che sono membri del gruppo locale Administrators, la versione di OpenSSH per Windows utilizza un file diverso: C:\ProgramData\ssh\administrators_authorized_keys, non .ssh\authorized_keys nel profilo dell'utente. Se l'autenticazione basata su chiavi per un account amministratore non funziona come previsto, controllare questo file.
Dopo qualsiasi modifica a sshd_config, riavviare il servizio per applicarla:
Restart-Service sshd
Verifica della connessione SFTP con WinSCP
Installare ed eseguire il client gratuito WinSCP. Nella finestra delle impostazioni di connessione, selezionare il protocollo di trasferimento file SFTP, inserire il nome host o l'indirizzo IP del server nel campo Host name, lasciare il campo Port number su 22 (a meno che non sia stata configurata una porta diversa) e inserire le credenziali dell'account Windows con cui ci si connette.

Se tutto è configurato correttamente, il client si connette al server SFTP e visualizza il contenuto della home directory dell'utente (la directory di profilo predefinita). Per impostazione predefinita, l'utente accede a C:\Users\<username>. I file possono quindi essere trasferiti in modo sicuro tra il server e il client tramite il protocollo SFTP.

Disinstallazione della funzionalità OpenSSH Server
1) Avviare PowerShell come amministratore.
2) Arrestare il servizio sshd prima di rimuovere la funzionalità, rimuoverla mentre il servizio è ancora in esecuzione o in uso attivo può non riuscire o bloccarsi:
Stop-Service sshd
3) Rimuovere la funzionalità:
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
4) (Opzionale) Rimuovere la regola firewall. Questo copre sia la regola creata automaticamente sia quella creata manualmente, nel caso una delle due esista:
Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName 'OpenSSH Server (sshd)' -ErrorAction SilentlyContinue
5) (Opzionale) Rimozione della configurazione: è possibile rimuovere solo il file di configurazione oppure eseguire una pulizia completa comprese le chiavi host.
Per rimuovere solo sshd_config senza toccare le chiavi host:
Remove-Item -Path 'C:\ProgramData\ssh\sshd_config' -Force
Per una pulizia completa comprese le chiavi host, rimuovere invece l'intera cartella di configurazione:
Remove-Item -Path 'C:\ProgramData\ssh' -Recurse -Force
Avviso: La rimozione dell'intera cartella elimina anche in modo permanente le chiavi host del server. I client che si connettono dopo una reinstallazione tratteranno il server come un host SSH nuovo e non riconosciuto. Eseguire questa operazione solo se non si intende reinstallare OpenSSH Server con la stessa configurazione in seguito.