Come installare OpenSSH Server su Windows 11

In PowerShell come amministratore, esegui Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0, poi Start-Service sshd e Set-Service -Name sshd -StartupType Automatic. L'installazione crea la regola del firewall OpenSSH-Server-In-TCP per la porta 22. Le chiavi per gli account amministratore vanno in C:\ProgramData\ssh\administrators_authorized_keys, non nella cartella dell'utente.

Aggiornata il .

Installazione

Apri PowerShell con Esegui come amministratore. Controlla se è già presente:

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

Se OpenSSH.Server~~~~0.0.1.0 mostra State : NotPresent, installalo:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Il minimo indicato da Microsoft è Windows 10 build 1809 o Windows Server 2019, con PowerShell 5.1.

Puoi farlo anche dalle Impostazioni: cerca Funzionalità facoltative in Start, scegli Visualizza funzionalità e aggiungi OpenSSH Server. Poi apri l'app Servizi, imposta OpenSSH SSH Server su Automatico e avvialo.

Avviare il servizio

Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
Get-Service sshd

Senza la seconda riga il servizio non riparte dopo un riavvio.

Controllare la regola del firewall

L'installazione dovrebbe creare e abilitare una regola per la porta 22. Questo è il controllo di Microsoft, che crea anche la regola se manca:

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
}

Provalo da un'altra macchina Windows:

Test-NetConnection -ComputerName server -Port 22

Connessione

ssh user@server

Per un account di dominio la forma è ssh domain\user@server. Di default ottieni cmd.exe. Per avere invece PowerShell, esegui questo sul server:

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

Per l'accesso con chiave serve prima una coppia di chiavi sul tuo computer. Vedi come generare una chiave SSH su Windows.

Chiavi: quale file viene letto

È qui che falliscono la maggior parte delle configurazioni. Il sshd_config predefinito su Windows finisce con:

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

Quindi il file dipende dall'account:

AccountFile
Utente standardC:\Users\user\.ssh\authorized_keys
Membro di AdministratorsC:\ProgramData\ssh\administrators_authorized_keys

Una chiave messa nella cartella dell'utente viene ignorata per un amministratore, e il login ripiega sulla richiesta della password. Per controllare se l'account è un amministratore:

Get-LocalGroupMember Administrators

Aggiungere una chiave per un amministratore

Esegui questo sul server in un PowerShell con privilegi elevati, con la tua chiave pubblica al posto dell'esempio:

Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value 'ssh-ed25519 AAAA... you@laptop'
icacls.exe "$env:ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

La seconda riga conta: il file deve avere voci di permesso solo per Administrators e SYSTEM. Su un Windows non in inglese il nome del gruppo è diverso, quindi usa il suo SID: /grant "*S-1-5-32-544:F".

Aggiungere una chiave per un utente standard

Esegui questo sul server come quell'utente:

New-Item -Force -ItemType Directory -Path $env:USERPROFILE\.ssh
Add-Content -Force -Path $env:USERPROFILE\.ssh\authorized_keys -Value 'ssh-ed25519 AAAA... you@laptop'

Non usare > o >> per questi file. In Windows PowerShell 5.1 scrivono in UTF-16, che non è ciò che il server si aspetta. Per copiare una chiave da un altro computer, vedi ssh-copy-id su Windows.

Cambiare le impostazioni e leggere i log

Il file di configurazione è C:\ProgramData\ssh\sshd_config. Riavvia il servizio dopo ogni modifica:

Restart-Service sshd

I log vanno nel Visualizzatore eventi, in Registri applicazioni e servizi, OpenSSH, Operational. Guarda lì per prima cosa quando un login fallisce, dato che il client dice soltanto Permission denied.

Nota che PermitRootLogin su Windows non fa nulla. Per impedire il login agli amministratori, usa DenyGroups administrators.

Domande

Posso fare il login con un account Microsoft Entra ID?

No. La documentazione di Microsoft dice che l'autenticazione a chiave funziona con gli account locali e di Active Directory, mentre gli account Entra non sono supportati da OpenSSH su Windows.

È lo stesso su Windows Server 2025?

OpenSSH vi è già installato. Ti servono solo Start-Service sshd e Set-Service -Name sshd -StartupType Automatic, oppure l'impostazione Remote SSH Access in Server Manager.

Fonti

Altro in SSH su ogni sistema

Tutte le guide