Come configurare un server SFTP su Windows con OpenSSH
Questa guida è valida per Windows Server 2019, 2022 e 2025, che includono OpenSSH Server come funzionalità opzionale integrata. Non è necessario scaricare alcun software di terze parti.
Guida passo passo
Installazione della funzionalità OpenSSH Server
1. Avviare PowerShell come amministratore: Start, digitare "PowerShell" → fare clic con il tasto destro 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

Verranno elencati sia OpenSSH.Client che OpenSSH.Server. Assicurati di controllare specificatamente lo stato di OpenSSH.Server; il componente client potrebbe essere già installato e non è oggetto di questa guida.
Se OpenSSH.Server mostra lo stato: NotPresent, installarlo:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Windows installa la funzionalità Server OpenSSH integrata in C:\Windows\System32\OpenSSH\. Non installare OpenSSH manualmente direttamente in C:\Windows, poiché ciò viola le convenzioni delle directory di Windows e potrebbe causare problemi di autorizzazione.
3. Avvia il servizio sshd e imposta 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 "Stato" dovrebbe indicare " In esecuzione". Per confermare che il tipo di avvio sia impostato su "Automatico":
Get-CimInstance Win32_Service -Filter "Name='sshd'" | Select-Object StartMode

5. Controllare il percorso del file 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 crea normalmente e automaticamente una regola del firewall in entrata denominata OpenSSH-Server-In-TCP. Verificare che esista e che sia abilitata:
Get-NetFirewallRule -Name *OpenSSH-Server*

Se la regola non è presente, crearla manualmente (notare il nome diverso della regola; questa regola creata manualmente è distinta 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. Ciò non conferma che il firewall lasci passare il traffico dall’esterno; per verificare completamente, esegui lo stesso comando da un altro computer sulla 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, Blocco note eseguito come amministratore) e verificare che siano presenti le seguenti impostazioni (o che siano configurate come necessario):
Port 22 PasswordAuthentication yes Subsystem sftp sftp-server.exe

L'opzione`PasswordAuthentication yes` è riportata qui per semplificare questa guida, ma per un server di produzione esposto a Internet, l'autenticazione basata su chiave con `PasswordAuthentication no` è la scelta più sicura. Consulta l'impostazione opzionale `AuthorizedKeysFile` riportata di seguito se intendi utilizzare l'autenticazione basata su chiave.
La riga Subsystem sftp definisce quale binario gestisce le sessioni SFTP. Se questa riga non è presente o non è scommentata, le connessioni SSH funzioneranno ma il trasferimento di file SFTP fallirà.
Per impostazione predefinita, questa riga è già presente e non commentata nel file di configurazione della funzionalità integrata. Se manca o è commentata con #, aggiungerla o rimuovere il commento, quindi salvare il file.
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
Funzionano sia sftp-server.exe che internal-sftp; questa guida utilizza sftp-server.exe poiché è il valore predefinito.
Impostazioni opzionali che potresti voler aggiungere in sshd_config:
# Default value, already set; shown here for reference if key-based authentication isn't working # AuthorizedKeysFile .ssh/authorized_keys # Restrict access to specific users (optional) # AllowUsers username1 username2 # Logging SyslogFacility LOCAL0 LogLevel INFO
Per gli account che fanno parte del gruppo Administrators locale, la versione per Windows di OpenSSH utilizza un file diverso: C:\ProgramData\ssh\administrators_authorized_keys, anziché .ssh\authorized_keys nel profilo dell’utente. Se l’autenticazione basata su chiave per un account amministratore non funziona come previsto, controllare invece questo file.
Dopo aver apportato qualsiasi modifica al file sshd_config, riavvia il servizio per applicare le modifiche:
Restart-Service sshd
Verifica della connessione SFTP tramite 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 Nome host, lasciare il campo Numero porta impostato su 22 (a meno che non sia stata configurata una porta diversa) e inserire le credenziali dell’account Windows con cui ci si sta connettendo.

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

Disinstallazione della funzionalità Server OpenSSH
1. Avviare PowerShell come amministratore.
2. Arrestare il servizio sshd prima di rimuovere la funzionalità; la rimozione mentre il servizio è ancora in esecuzione o in uso attivo può causare un errore o un blocco:
Stop-Service sshd
3. Rimuovere la funzionalità:
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
4. (Facoltativo) Rimuovere la regola del firewall. Ciò riguarda sia la regola creata automaticamente che quella creata manualmente, qualora una delle due fosse presente:
Remove-NetFirewallRule -Name OpenSSH-Server-In-TCP -ErrorAction SilentlyContinue Remove-NetFirewallRule -DisplayName 'OpenSSH Server (sshd)' -ErrorAction SilentlyContinue
5. (Facoltativo) 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 modificare 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
La rimozione dell’intera cartella comporta anche l’eliminazione definitiva delle chiavi host del server. I client che si connetteranno dopo la reinstallazione tratteranno il server come un nuovo host SSH non riconosciuto. Eseguire questa operazione solo se non si intende reinstallare OpenSSH Server con la stessa configurazione in un secondo momento.