Come usare le chiavi SSH con Windows in Azure

Quando ci si connette a macchine virtuali (VM) Linux in Azure, è necessario usare la crittografia a chiave pubblica per fornire un modo più sicuro per accedere alla VM Linux. Questo processo comporta uno scambio di chiavi pubbliche e private mediante il comando Sicure Shell (SSH) per l'autenticazione, anziché nome utente e password. Le password sono vulnerabili agli attacchi di forza bruta, soprattutto nelle VM con connessione Internet, ad esempio i server Web. Questo articolo fornisce una panoramica delle chiavi SSH e di come generare le chiavi appropriate in un computer Windows.

Panoramica di SSH e delle chiavi

È possibile accedere in modo sicuro alla VM Linux mediante una chiave pubblica e una chiave privata:

  • La chiave pubblica si trova nella VM Linux o in qualsiasi altro servizio che si desidera usare con la crittografia a chiave pubblica.
  • La chiave privata è quella che si presenta alla VM Linux quando si effettua l'accesso, per verificare la propria identità. Sulla chiave privata è necessario mantenere la massima riservatezza, evitando di condividerla.

La chiave pubblica e la chiave privata sono utilizzabili in più VM e servizi. Non è necessaria una coppia di chiavi per ogni VM o servizio a cui si desidera accedere. Per una panoramica più dettagliata, vedere crittografia a chiave pubblica.

SSH è un protocollo per connessioni crittografate che consente accessi protetti su connessioni non sicure. È il protocollo di connessione predefinito per le VM Linux ospitate in Azure. Sebbene SSH stessa fornisca una connessione crittografata, se si usano password con le connessioni SSH la VM rimane vulnerabile agli attacchi di forza bruta o di individuazione password. Un metodo più sicuro e preferito per la connessione a una VM mediante SSH è tramite chiave pubblica e privata, anche dette chiavi SSH.

Se non si desidera usare chiavi SSH, è possibile comunque accedere alle VM Linux mediante una password. Se la VM non è connessa a Internet, l'utilizzo di password può essere sufficiente. Tuttavia è comunque necessario gestire le password per ogni VM Linux e mantenere criteri e procedure relative alle password integre, quali una lunghezza minima delle password e aggiornamenti regolari. L'utilizzo delle chiavi SSH riduce la complessità di gestione delle credenziali individuali tra più VM.

Pacchetti Windows e client SSH

Per la connessione a VM Linux e la loro gestione in Azure si usa un client SSH. I computer Windows tipicamente non hanno un client SSH installato. Nell'Aggiornamento dell'anniversario di Windows 10 è stato aggiunto Bash per Windows e l'aggiornamento Windows 10 Creators Update più recente offre aggiornamenti aggiuntivi. Questo sottosistema di Windows per Linux consente di eseguire e di accedere a utilità come un client SSH in modo nativo dall'interno della shell di Bash. È quindi possibile seguire uno dei documenti Linux, ad esempio How to generate SSH key pairs for Linux (Come generare coppie di chiavi SSH per Linux). Bash per Windows è ancora in fase di sviluppo e viene considerato una versione beta. Per altre informazioni su Bash per Windows, vedere Bash in Ubuntu in Windows.

Se si intende usare una soluzione diversa da Bash per Windows, sono disponibili client SSH Windows comuni nei pacchetti seguenti:

Quali file di chiavi è necessario creare?

Azure richiede chiavi pubbliche e private nel formato ssh-rsa almeno a 2048 bit. Se si gestiscono risorse di Azure usando il modello di distribuzione classico, è necessario anche generare un PEM (file .pem).

Di seguito sono descritti gli scenari di distribuzione e i tipi di file da usare per ognuno:

  1. Le chiavi ssh-rsa sono necessarie per qualsiasi distribuzione che usa il portale di Azure e le distribuzioni di Resource Manager che usano l'interfaccia della riga di comando di Azure.
    • Queste chiavi sono in genere tutto ciò che serve alla maggior parte degli utenti.
  2. Il file .pem è necessario per creare VM mediante la distribuzione classica. Queste chiavi sono supportate nelle distribuzioni classiche quando si usa il portale di Azure o l'interfaccia della riga di comando di Azure.
    • È necessario creare questi certificati e chiavi aggiuntive solo se si gestiscono risorse create usando il modello di distribuzione classica.

Installare Git per Windows

Nella sezione precedente sono elencati diversi pacchetti che includono lo strumento openssl per Windows. Questo strumento è necessario per creare chiavi pubbliche e private. L'esempio seguente illustra come installare e usare Git per Windows, ma è possibile scegliere qualsiasi pacchetto desiderato. GIT per Windows consente di accedere ad alcuni strumenti software open-source (OSS) e utilità aggiuntive che possono essere utili quando si lavora con le VM Linux.

  1. Scaricare e installare Git per Windows dal percorso seguente: https://git-for-windows.github.io/.
  2. Accettare le opzioni predefinite durante il processo di installazione, a meno che sia necessario modificarle.
  3. Eseguire Git Bash dal Menu Start > Git > Git Bash. La console è simile all'esempio seguente:

    Shell Bash di GIT per Windows

Creare una chiave privata

  1. Nella finestra Git Bash usare openssl.exe per creare una chiave privata. Nell'esempio seguente vengono creati una chiave denominata myPrivateKey e un certificato denominato myCert.pem:

    openssl.exe req -x509 -nodes -days 365 -newkey rsa:2048 \
        -keyout myPrivateKey.key -out myCert.pem
    

    L'output è simile al seguente esempio:

    Generating a 2048 bit RSA private key
    .......................................+++
    .......................+++
    writing new private key to 'myPrivateKey.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:
    

    Se bash segnala un errore, provare ad aprire una nuova finestra Git Bash con privilegi elevati. Quindi eseguire di nuovo il comando openssl.

  2. Rispondere ai prompt per il nome del paese, la località, il nome dell'organizzazione e così via.

  3. La nuova chiave privata e certificato vengono creati nella directory di lavoro corrente. Come misura di sicurezza, è necessario impostare le autorizzazioni per la chiave privata in modo da essere l'unica persona a potervi accedere:

    chmod 0600 myPrivateKey.key
    
  4. La sezione successiva descrive nei dettagli l'uso di PuTTYgen sia per visualizzare che per utilizzare la chiave pubblica nonché per creare una chiave privata specifica per l'impiego di PuTTY con SSH in VM Linux. Il comando seguente genera un file di chiave pubblica denominato myPublicKey.key che è possibile usare subito:

    openssl.exe rsa -pubout -in myPrivateKey.key -out myPublicKey.key
    
  5. Se è necessario anche gestire le risorse classiche, convertire myCert.pem in myCert.cer (certificato X509 con codifica DER). Eseguire questo passaggio facoltativo solo se è necessario gestire in modo specifico risorse classiche precedenti.

    Convertire il certificato mediante il comando seguente:

    openssl.exe  x509 -outform der -in myCert.pem -out myCert.cer
    

Creare una chiave privata per PuTTY

PuTTY è un comune client SSH per Windows. È possibile usare qualsiasi client SSH desiderato. Per usare PuTTY è necessario creare un tipo di chiave aggiuntivo, una chiave privata PuTTY (PPK). Se non si desidera usare PuTTY, ignorare questa sezione.

L'esempio seguente crea questa chiave privata aggiuntiva appositamente per l'uso da parte di PuTTY:

  1. Usare Git Bash per convertire la propria chiave privata in una chiave privata RSA che PuTTYgen possa comprendere. Nell'esempio seguente viene creata una chiave denominata myPrivateKey_rsa dalla chiave esistente denominata myPrivateKey:

    openssl rsa -in ./myPrivateKey.key -out myPrivateKey_rsa
    

    Come misura di sicurezza, è necessario impostare le autorizzazioni per la chiave privata in modo da essere l'unica persona a potervi accedere:

    chmod 0600 myPrivateKey_rsa
    
  2. Scaricare ed eseguire PuTTYgen dal percorso seguente: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
  3. Fare clic sul menu: File > Load Private Key
  4. Individuare la chiave privata (myPrivateKey_rsa nell'esempio precedente). La directory predefinita quando si avvia Git Bash è C:\Users\%username%. Modificare il filtro dei file in modo da visualizzare Tutti i file (*.*):

    Caricare la chiave privata esistente in PuTTYgen

  5. Fare clic su Apri. Un messaggio indica che la chiave è stata importata correttamente:

    Chiave importata correttamente in PuTTYgen

  6. Fare clic su OK per chiudere la finestra del messaggio.
  7. La chiave pubblica viene visualizzata nella parte superiore della finestra di PuTTYgen. Questa chiave pubblica potrà essere copiata e incollata nel portale di Azure o in un modello di Azure Resource Manager quando si crea una VM Linux. È inoltre possibile fare clic su Salva chiave pubblica per salvare una copia nel computer:

    Salvare un file di chiave pubblica PuTTY

    L'esempio seguente illustra come copiare e incollare questa chiave pubblica nel portale di Azure quando si crea una VM Linux. Quindi la chiave pubblica viene generalmente archiviata in ~/.ssh/authorized_keys nella nuova VM.

    Usare la chiave pubblica quando si crea una VM nel portale di Azure

  8. Quando si torna in PuTTYgen, fare clic su Save private Key:

    Salvare il file di chiave privata PuTTY

    Avviso

    Un messaggio chiede se si desidera continuare senza immettere una passphrase per la chiave. Una passphrase è come una password associata alla chiave privata. Anche se qualcuno riuscisse a ottenere la chiave privata, la sola chiave non gli consentirebbe comunque di autenticarsi. Per farlo avrebbe bisogno anche della passphrase. Quando non si imposta una passphrase, se un utente ottiene la chiave privata potrà accedere a qualsiasi VM o servizio che usa tale chiave. Creare una passphrase è altamente consigliato. Tuttavia, se si dimentica la passphrase, non è possibile recuperarla.

    Se si desidera immettere una passphrase, fare clic su No, immettere una passphrase nella finestra principale di PuTTYgen e quindi fare clic di nuovo su Save private key. In caso contrario, fare clic su per continuare senza fornire la passphrase facoltativa.

  9. Immettere un nome e un percorso in cui salvare il file PPK.

Usare Putty per connettere SSH a un computer Linux

PuTTY, come indicato in precedenza, è un comune client SSH per Windows. È possibile usare qualsiasi client SSH desiderato. La procedura seguente illustra come usare la chiave privata per autenticarsi con la VM Azure tramite SSH. I passaggi sono simili in altri client con chiave SSH per quanto riguarda la necessità di caricare la chiave privata per autenticare la connessione SSH.

  1. Scaricare ed eseguire putty dal percorso seguente: http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
  2. Specificare il nome host o l'indirizzo IP della VM dal portale di Azure:

    Aprire una nuova connessione PuTTY

  3. Prima di selezionare Apri, fare clic sulla scheda Connessione > SSH > Aut. Individuare e selezionare la chiave privata:

    Selezionare la chiave privata PuTTY per l'autenticazione

  4. Fare clic su Open per connettersi alla macchina virtuale.

Passaggi successivi

È possibile generare chiavi pubbliche e private anche con OS X e Linux.

Per altre informazioni su Bash per Windows e sui vantaggi di avere strumenti OSS disponibili nel computer Windows, vedere Bash in Ubuntu in Windows.

Se si verificano problemi nell'uso di SSH per connettersi alle VM Linux, vedere Risoluzione dei problemi di connessione SSH a una VM Linux di Azure.