Il protocollo Secure Shell (SSH) e il progetto OpenSSH esistono da decenni su Linux. Ma OpenSSH su Windows non è stato abbracciato nel mondo di Windows fino a poco tempo fa. Di conseguenza, un server Windows di solito non viene fornito preinstallato e pronto all’uso e richiede una configurazione.
In questo tutorial, imparerai come accedere al tuo server Windows tramite SSH con la stessa facilità di Linux. Imparerai come installare (o aggiornare) OpenSSH su Windows, aggiungere le regole appropriate del firewall e configurare l’autenticazione basata su chiave pubblica, password e certificato.
Prerequisiti
Per seguire efficacemente gli esempi e le demo in questo articolo, devi soddisfare i seguenti requisiti.
- A Windows Server machine – This article will use Windows Server 2019 Datacenter. The server this tutorial will use will have a user account called june and will connect to the server at the IP address of 40.117.77.227 with a hostname of ataWindows.
- A local computer with PowerShell 7.1 installed. PowerShell 7.1 is available in Windows, Linux, and macOS. The examples in this article use PowerShell 7.1 in Windows 10.
Scaricare OpenSSH
A differenza dei server Linux, i server Windows non dispongono di un server SSH preinstallato. Ma Microsoft ha rilasciato un porting open-source di OpenSSH per Windows. Con questo rilascio, è ora possibile configurare un server SSH su una macchina Windows.
Per iniziare, devi prima scaricare OpenSSH. Per farlo, segui i passaggi seguenti:
- Connettiti al desktop di un server Windows utilizzando Remote Desktop (RDP) o il tuo client di gestione desktop preferito.
2. Sul desktop del tuo server Windows, apri una console Windows PowerShell con privilegi elevati.
3. Successivamente, copia il codice qui sotto, incollalo nella finestra di PowerShell e premi Invio. Questo script scaricherà l’ultima versione di OpenSSH, che al momento di questa stesura è la v8.1.0.0p1-Beta, nella directory di lavoro corrente.
Se preferisci salvare il codice PowerShell per scaricare OpenSSH, puoi anche aprire un editor di codice come Windows PowerShell ISE o Visual Studio Code e salvarlo lì.
4. Il file OpenSSH-Win64.zip dovrebbe ora trovarsi nella tua directory di lavoro corrente. Verifica questo eseguendo il comando qui sotto.
Come puoi vedere qui sotto, il file OpenSSH-Win64.zip esiste nella directory.

Installazione di OpenSSH
Dopo aver scaricato OpenSSH-Win64.zip, il passo successivo è installare OpenSSH sul server. Non c’è un wizard di installazione nel caso te lo aspettassi.
- Mentre ti trovi ancora nella stessa sessione di PowerShell, copia il codice di seguito e eseguilo in PowerShell. Questo codice estrae i contenuti del file OpenSSH-Win64.zip in C:\Program Files\OpenSSH.
2. Dopo aver estratto il file ZIP, esegui il comando di seguito in PowerShell per eseguire lo script C:\Program Files\OpenSSH\install-sshd.ps1. Questo script installa il servizio server SSH OpenSSH (sshd) e il servizio agent di autenticazione OpenSSH (sshd-agent).
Puoi vedere il risultato atteso di seguito.

Per assicurarti che il server SSH si avvii automaticamente, esegui il comando di seguito in PowerShell.
Aggiungi una Regola del Firewall di Windows per Consentire il Traffico SSH
Questa procedura è applicabile solo se il tuo server Windows utilizza il Firewall di Windows. Per i server che utilizzano firewall di terze parti, consulta la documentazione del tuo firewall su come consentire la porta 22.
L’installazione di OpenSSH non crea automaticamente una regola di eccezione del firewall per consentire il traffico SSH. Pertanto, il tuo prossimo compito è creare manualmente la regola del firewall.
Uno dei modi più semplici per creare una nuova regola del firewall di Windows è utilizzare PowerShell e il cmdlet New-NetFirewallRule
. Il comando di seguito crea una regola del firewall chiamata Allow SSH che consente tutto il traffico TCP in ingresso destinato alla porta 22.
Copia il comando di seguito ed eseguilo in PowerShell.
Nell’immagine sottostante viene mostrato l’output atteso in PowerShell dopo la creazione della regola del firewall.

Connessione tramite autenticazione con password
A questo punto, hai installato OpenSSH su Windows e eseguito la configurazione iniziale del server. Il passaggio successivo è testare se la connessione tramite SSH funziona effettivamente.
Per testare il tuo server SSH appena configurato, esegui il comando ssh
sul tuo computer locale.
Le stesse operazioni di questa sezione si applicano anche quando ci si connette a un server SSH Linux.
1. Dal tuo computer locale, apri PowerShell questa volta.
2. Successivamente, esegui il comando di seguito per avviare il processo di accesso SSH. Assicurati di modificare il nome utente e l’host remoto del tuo server Windows.
3. Poiché ti stai connettendo per la prima volta al server, vedrai un prompt che indica che l’autenticità dell’host non può essere verificata. Il messaggio significa che il tuo computer non riconosce ancora l’host remoto. Digita sì e premi Invio per continuare.
4. Quando ti viene richiesta la password, digita la password del tuo account e premi Invio.

5. Dopo esserti autenticato, come puoi vedere nello screenshot di seguito, arriverai al prompt dei comandi dell’host remoto. Supponiamo che tu voglia confermare di aver inserito la sessione sull’host remoto. Per farlo, digita hostname
e premi Invio. Il comando dovrebbe restituire il nome del computer remoto.

Cambiare la shell predefinita di OpenSSH in PowerShell
Quando ti sei connesso per la prima volta al tuo server SSH di Windows, noterai che la shell predefinita o l’interprete dei comandi è CMD. Avere CMD come shell SSH predefinita va bene, ma se preferisci utilizzare PowerShell come shell predefinita, segui questi passaggi.
Per cambiare la shell predefinita di OpenSSH da CMD a PowerShell:
Innanzitutto, apri una finestra di PowerShell con privilegi elevati sul tuo Windows Server, se non ne hai già una aperta.
In seguito, crea un nuovo valore stringa del registro chiamato DefaultShell nella chiave di registro HKLM:\SOFTWARE\OpenSSH. Imposta i dati della stringa DefaultShell sul percorso di Windows PowerShell C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe.
Lo screenshot di seguito mostra il risultato atteso del comando.

Configurazione dell’autenticazione con chiave pubblica
Nelle sezioni precedenti, ti sei connesso utilizzando un nome utente e una password. Questo funziona, ma un modo più sicuro per autenticarsi con un server SSH è utilizzare una coppia di chiavi.
In poche parole, una coppia di chiavi è composta da due chiavi chiamate chiave pubblica e chiave privata, che costituiscono un insieme di credenziali di sicurezza per provare la tua identità.
La chiave pubblica viene memorizzata sul server, mentre la chiave privata rimane sul computer locale. Devi trattare la chiave privata come una password. Se la chiave privata viene compromessa, chiunque può utilizzarla per accedere al tuo server SSH.
Preparazione del file administrators_authorized_keys
Le chiavi pubbliche devono essere sul server. Ma dove? Per OpenSSH su Windows, il server SSH legge le chiavi pubbliche dal file C:\ProgramData\ssh\administrators_authorized_keys. Ma questo file non esiste di default. Devi crearne uno prima.
Segui i seguenti passaggi per creare il file administrators_authorized_keys e impostarne correttamente la lista di controllo degli accessi (ACL).
Sul server Windows:
1. Apri una console di Windows PowerShell con privilegi elevati se non lo hai già fatto.
2. Copia il comando di seguito e avvialo in PowerShell. Questo comando crea il file administrators_authorized_keys utilizzando il cmdlet New-Item
.
Dovresti ottenere un risultato simile allo screenshot qui sotto.

3. Successivamente, ottieni l’ACL attualmente assegnata al file ssh_host_dsa_key e copia quella ACL nel file administrators_authorized_keys. Per farlo, esegui il comando di seguito.
Il servizio OpenSSH richiede che solo il gruppo Amministratori e l’account SYSTEM abbiano accesso al file administrators_authorized_keys. E ha senso copiare l’ACL di ssh_host_dsa_key in administrators_authorized_keys perché l’ACL è già impostata.
4. Ora apri Esplora risorse.
5. Naviga alla cartella C:\ProgramData\ssh\.
6. Fai clic con il pulsante destro del mouse sul file administrators_authorized_keys e fai clic su Proprietà.
7. Nella pagina delle proprietà, fai clic sulla scheda Sicurezza e fai clic su Avanzate.

8. Quindi, verifica se i permessi sono come mostrato nell’immagine sottostante.

Generare una nuova coppia di chiavi SSH
Per generare una nuova coppia di chiavi SSH, utilizzare il comando ssh-keygen
, che fa parte degli strumenti client OpenSSH integrati in Windows 10 (e versioni successive) e nella maggior parte dei sistemi operativi Linux.
L’esempio mostrato in questa sezione funziona su computer Windows e Linux.
Sul tuo computer locale, in una console PowerShell:
1. Naviga nella cartella .ssh della tua cartella home eseguendo il comando seguente.
2. Successivamente, digita il comando ssh-keygen
e premi Invio. Quando ti viene chiesto di inserire un percorso per salvare la chiave che stai generando, mantieni il percorso predefinito e premi Invio. In questo modo il tuo client SSH potrà trovare automaticamente le tue chiavi SSH durante l’autenticazione.
In Windows, il percorso predefinito del file chiave è C:\Users\<username>\.ssh\id_rsa.
3. Alla successiva richiesta, lascia vuota la passphrase. A questo punto, non è necessario utilizzare una passphrase per i test.
Aggiungere una passphrase alla tua chiave privata aumenta significativamente la sua sicurezza. Una passphrase funziona come un’autenticazione a due fattori (2FA) per la tua chiave privata.
Noterai che il comando ha creato due file; id_rsa (chiave privata) e id_rsa.pub (chiave pubblica).

Caricare la chiave pubblica sul server SSH di Windows
Ora che hai generato la tua coppia di chiavi privata-pubblica, il tuo prossimo passo è copiare la chiave pubblica nel file C:\ProgramData\ssh\administrators_authorized_keys sul server SSH.
Sul tuo computer locale, in una console PowerShell:
1. Copia il codice sottostante ed eseguilo in PowerShell. Assicurati di modificare prima il nome utente e l’indirizzo IP. Puoi fare riferimento al commento sopra ogni comando per sapere cosa fa ciascun comando.
2. Inserisci la tua password quando richiesto e ssh procederà a copiare la chiave pubblica. Vedrai un risultato simile, come mostrato di seguito.

Connessione con SSH utilizzando l’autenticazione a chiave pubblica
Ora che hai copiato la tua chiave pubblica sul server SSH, non è più necessario utilizzare una password per l’autenticazione. Come puoi vedere qui sotto, ssh non richiede una password.

Configurazione dell’autenticazione tramite certificato
Come l’autenticazione a chiave pubblica, l’autenticazione tramite certificato è priva di password o protetta da una frase segreta. Per abilitare il login tramite certificato, segui la stessa procedura per generare una coppia di chiavi senza distribuire la chiave pubblica al server SSH.
Non è necessario associare la chiave pubblica ai file authorized_keys o administrators_authorized_keys sul server SSH. Invece, la chiave pubblica viene firmata utilizzando una autorità di certificazione (CA).
Creazione della chiave dell’autorità di certificazione (CA)
La generazione delle chiavi CA per la firma è simile alla generazione di una coppia di chiavi utente come hai fatto in precedenza in questo articolo. Solo che questa volta dovrai specificare un nome file per le nuove chiavi CA. Per farlo, sul tuo server Windows in una console PowerShell:
Esegui il comando ssh-keygen
come mostrato di seguito. Questo comando crea la chiave CA in C:\ProgramData\ssh\ca_userkeys, ma puoi utilizzare un nome file diverso. L’utilizzo di un nome file diverso non influirà sulla funzionalità della chiave CA.
Quando ti viene richiesta una passphrase, lascia vuota la passphrase e premi Invio.
Puoi vedere di seguito che il comando ha creato due file. ca_userkeys, che è la chiave privata, e ca_userkeys.pub, che è la chiave pubblica.

Ora che hai generato le chiavi CA, indica al server SSH di fidarsi della CA e dove trovare la chiave CA. Per fare ciò, aggiungi una nuova riga TrustedUserCAKeys percorso/verso/ca_userkeys.pub
al file C:\ProgramData\ssh\sshd_config sul server.
Esegui i comandi di seguito per aggiungere l’elemento di configurazione nel file sshd_config.
Firma della chiave pubblica dell’utente
A questo punto, hai generato le chiavi CA e configurato il server SSH per fidarsi del file chiave pubblica CA. Ora devi firmare la tua chiave pubblica dell’utente.
Sul tuo computer locale, in una console PowerShell:
1. Copia il file id_rsa.pub
nella tua unità home sul server SSH utilizzando il comando SCP. Assicurati di cambiare il nome utente e l’indirizzo IP con i valori corretti.
2. Accedi al tuo server Windows utilizzando ssh. Una volta effettuato l’accesso, esegui ssh-keygen
per firmare la chiave pubblica dell’utente. Noterai che il comando sottostante utilizza diversi parametri. Vediamoli nel dettaglio.
-s C:\ProgramData\ssh\ca_userkeys
– specifica la posizione della chiave CA per la firma della chiave pubblica. In questo esempio, la chiave CA è quella che hai generato.-I id_username
– specifica l’ID da assegnare alla chiave pubblica dell’utente firmata. Modifica il valoreid_username
con il nome desiderato.-V +4w
– questo parametro specifica il periodo di validità della chiave firmata. In questo esempio,+4w
indica che la chiave dell’utente firmata sarà valida per quattro settimane. Puoi modificare questo valore con il periodo di validità preferito.-n username
– questo è il nome utente a cui sarà associata la chiave pubblica firmata.<percorso a id_rsa.pub>
– questo è il percorso della chiave pubblica dell’utente da firmare (Windows).
Dopo aver eseguito il comando nella sessione SSH, dovresti ottenere un output simile a quello mostrato di seguito. Come puoi vedere, il comando ha generato un nuovo file chiamato id_rsa-cert.pub, che è il certificato dell’utente firmato.

3. Ora, torna alla sessione PowerShell del tuo computer locale e copia il file id_rsa-cert.pub dal server al tuo computer locale. Prima di eseguire il comando, modifica il nome utente e l’indirizzo IP con i valori corretti.
Una volta completata la copia, troverai il certificato dell’utente firmato nella tua cartella personale, come mostrato di seguito.

Connessione con SSH utilizzando l’autenticazione tramite certificato.
Hai configurato l’autenticazione tramite certificato e ora hai il certificato dell’utente. Dovresti testare se riesci a connetterti al server SSH con l’autenticazione tramite certificato.
Il comando per connettersi a SSH con un certificato è lo stesso utilizzato per la password o la chiave pubblica. Tuttavia, se hai precedentemente abilitato l’autenticazione tramite chiave pubblica, devi prima disabilitarla. Altrimenti, SSH continuerà a utilizzare la tua coppia di chiavi anziché il tuo certificato.
Per disabilitare la tua coppia di chiavi, rimuovi la tua chiave pubblica dal file administrators_authorized_keys. Per farlo, segui questi passaggi.
N.B. I comandi successivi svuoteranno completamente il file administrators_authorized_keys, rimuovendo effettivamente tutte le chiavi pubbliche mappate. Se non desideri cancellare tutte le chiavi pubbliche mappate, utilizza un editor di testo per rimuovere manualmente le chiavi pubbliche selezionate da ciascun file.
Mentre sei connesso via SSH al server Windows:
1. Esegui il seguente codice in PowerShell per svuotare il file administrators_authorized_keys.
2. A questo punto, i file authorized_keys e administrators_authorized_keys sono vuoti, come puoi vedere nella schermata sottostante.

3. Digita exit
e premi Invio per disconnetterti dalla sessione SSH. Tornerai alla sessione PowerShell.
4. Dopo aver rimosso le chiavi pubbliche, il tuo prossimo tentativo di accesso SSH utilizzerà l’autenticazione tramite certificato. L’esperienza di accesso sarà la stessa dell’autenticazione tramite chiave pubblica.

Conclusione
Ora hai configurato un server OpenSSH per Windows da zero, fino all’esplorazione e alla configurazione di vari metodi di autenticazione. Ora puoi connetterti ai tuoi server Windows esattamente come faresti con Linux!