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:
| Account | File |
|---|---|
| Utente standard | C:\Users\user\.ssh\authorized_keys |
| Membro di Administrators | C:\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
- Guida introduttiva a OpenSSH Server per Windows, Microsoft Learn
- Configurazione di OpenSSH Server per Windows, Microsoft Learn
- Autenticazione a chiave in OpenSSH per Windows, Microsoft Learn
- sshd_config predefinito, fork OpenSSH di Microsoft
- Sistemi di logging, wiki di Win32-OpenSSH