Condividi tramite


Azioni rapide: Creare e usare una coppia di chiavi SSH pubblica e privata per le macchine virtuali Linux in Azure

Si applica a: ✔️ macchine virtuali di Linux ✔️ set di scalabilità flessibili

Con una coppia di chiavi SSH (Secure Shell), è possibile creare macchine virtuali (VM) in Azure che usano chiavi SSH per l'autenticazione. Questo articolo illustra come generare rapidamente e usare una coppia di file di chiavi pubblica e privata per le macchine virtuali Linux. È possibile completare questi passaggi con Azure Cloud Shell, macOS o un host Linux.

Per informazioni sulla risoluzione dei problemi relativi a SSH, vedere Risolvere i problemi relativi alle connessioni SSH a una macchina virtuale Linux di Azure che non riesce, genera errori o viene rifiutato.

Nota

Per impostazione predefinita, le macchine virtuali create con le chiavi SSH vengono configurate con le password disabilitate, aumentando considerevolmente la difficoltà degli attacchi basati su forza bruta per scoprire le password.

Per altri scenari ed esempi, vedere Procedura dettagliata per creare coppie di chiavi SSH.

Per altri modi in cui generare e usare le chiavi SSH in un computer Windows, vedere Come usare le chiavi SSH con Windows in Azure.

Formati di chiave SSH supportati

Azure supporta attualmente i tipi di chiave seguenti:

  • PROTOCOLLO SSH 2 (SSH-2) RSA (Rivest, Shamir, Adleman) con una lunghezza minima di 2048 bit
  • ED25519 chiavi con una lunghezza fissa di 256 bit

Altri formati chiave, ad esempio Elliptic-curve Diffie–Hellman (ECDH) e Elliptic Curve Digital Signature Algorithm (ECDSA) non sono attualmente supportati.

Creare una coppia di chiavi SSH

Usare il comando ssh-keygen per generare i file di chiave pubblica e privata SSH. Per impostazione predefinita, questi file vengono creati nella directory ~/.ssh. È possibile specificare un percorso diverso e una password facoltativa (passphrase) per accedere al file di chiave privata. Se nel percorso specificato è presente una coppia di chiavi SSH con lo stesso nome, questi file vengono sovrascritti.

Il comando seguente crea una coppia di chiavi SSH usando la crittografia RSA e una lunghezza in bit pari a 4096:

ssh-keygen -m PEM -t rsa -b 4096 -f ~/.ssh/id_rsa.pem

Il comando seguente crea una coppia di chiavi SSH usando ED25519 crittografia con una lunghezza fissa di 256 bit:

ssh-keygen -m PEM -t ed25519 -f ~/.ssh/id_ed25519.pem

Nota

È anche possibile creare coppie di chiavi con l'interfaccia della riga di comando di Azure con il comando az sshkey create, come descritto in Generare e archiviare chiavi SSH.

Se si usa l'interfaccia della riga di comando di Azure per creare la macchina virtuale con il comando az vm create, facoltativamente è possibile creare i file della chiave SSH pubblica e privata usando con l'opzione --generate-ssh-keys. I file delle chiavi vengono archiviati nella directory ~/.ssh se non diversamente specificato con l'opzione --ssh-dest-key-path. Se esiste già una coppia di chiavi SSH e viene usata l'opzione --generate-ssh-keys , non verrà generata una nuova coppia di chiavi, ma verrà usata la coppia di chiavi esistente. Nel comando seguente sostituire VMname, RGname e UbuntuLTS con i propri valori:

az vm create --name VMname --resource-group RGname --image Ubuntu2204 --generate-ssh-keys

Nota

az sshkey create command deafults to RSA encryption e non può essere usato per generare coppie di chiavi ED25519, ma è possibile creare una coppia di chiavi ED25519 usando ssh-keygen come descritto in precedenza e quindi usare tale chiave pubblica per creare una macchina virtuale.

Fornire una chiave SSH pubblica quando si distribuisce una macchina virtuale

Per creare una macchina virtuale Linux che usa le chiavi SSH per l'autenticazione, specificare la chiave SSH pubblica quando si crea la macchina virtuale tramite il portale di Azure, l'interfaccia della riga di comando di Azure, i modelli di Azure Resource Manager o altri metodi:

Se non si ha familiarità con il formato di una chiave pubblica SSH, è possibile visualizzare la chiave pubblica con il comando cat seguente, sostituendo ~/.ssh/id_rsa.pub con il percorso e il nome del proprio file di chiave pubblica, se necessario:

Coppia di chiavi RSA

cat ~/.ssh/id_rsa.pub

Un tipico valore di chiave pubblica RSA è simile all'esempio seguente:

ssh-rsa AAAAB3NzaC1yc2EAABADAQABAAACAQC1/KanayNr+Q7ogR5mKnGpKWRBQU7F3Jjhn7utdf7Z2iUFykaYx+MInSnT3XdnBRS8KhC0IP8ptbngIaNOWd6zM8hB6UrcRTlTpwk/SuGMw1Vb40xlEFphBkVEUgBolOoANIEXriAMvlDMZsgvnMFiQ12tD/u14cxy1WNEMAftey/vX3Fgp2vEq4zHXEliY/sFZLJUJzcRUI0MOfHXAuCjg/qyqqbIuTDFyfg8k0JTtyGFEMQhbXKcuP2yGx1uw0ice62LRzr8w0mszftXyMik1PnshRXbmE2xgINYg5xo/ra3mq2imwtOKJpfdtFoMiKhJmSNHBSkK7vFTeYgg0v2cQ2+vL38lcIFX4Oh+QCzvNF/AXoDVlQtVtSqfQxRVG79Zqio5p12gHFktlfV7reCBvVIhyxc2LlYUkrq4DHzkxNY5c9OGSHXSle9YsO3F1J5ip18f6gPq4xFmo6dVoJodZm9N0YMKCkZ4k1qJDESsJBk2ujDPmQQeMjJX3FnDXYYB182ZCGQzXfzlPDC29cWVgDZEXNHuYrOLmJTmYtLZ4WkdUhLLlt5XsdoKWqlWpbegyYtGZgeZNRtOOdN6ybOPJqmYFd2qRtb4sYPniGJDOGhx4VodXAjT09omhQJpE6wlZbRWDvKC55R2d/CSPHJscEiuudb+1SG2uA/oik/WQ== username@domainname

coppia di chiavi ED25519

cat ~/.ssh/id_ed25519.pub

Un tipico valore di chiave pubblica ED25519 è simile all'esempio seguente:

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILRjWGWLeiUQ3U9fNnCsNpXIyACpD/Jbm09OZGsz3DIM username@domainname

Se si copiano e si incollano i contenuti del file di chiave pubblica da usare nel portale di Azure o in un modello di Resource Manager, verificare di non copiare spazi finali. Per copiare una chiave pubblica in macOS, è possibile inviare tramite pipe il file della chiave pubblica a pbcopy. Analogamente in Linux è possibile inviare tramite pipe il file della chiave pubblica a programmi come xclip.

La chiave pubblica inserita nella macchina virtuale Linux in Azure è archiviata per impostazione predefinita nella ~/.ssh/ directory, a meno che non sia stata specificata una posizione diversa quando è stata creata la coppia di chiavi. Per usare l'interfaccia della riga di comando di Azure 2.0 per creare la macchina virtuale con una chiave pubblica esistente, specificare il valore e, facoltativamente, il percorso della chiave pubblica usando il comando az vm create con l'opzione --ssh-key-values. Nel comando seguente sostituire myVM, myResourceGroup, UbuntuLTS, azureuser e mysshkey.pub con valori personalizzati:

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image Ubuntu2204 \
  --admin-username azureuser \
  --ssh-key-values mysshkey.pub

Se si vogliono usare più chiavi SSH con la macchina virtuale, è possibile immetterle in un elenco delimitato da virgole, ad esempio questo --ssh-key-values sshkey-desktop.pub, sshkey-laptop.pub.

Usare SSH per connettersi alla macchina virtuale

Con la chiave pubblica distribuita nella macchina virtuale di Azure e la chiave privata nel sistema locale, stabilire una connessione SSH alla macchina virtuale usando l'indirizzo IP o il nome DNS della macchina virtuale. Nel comando seguente sostituire azureuser e myvm.westus.cloudapp.azure.com con il nome utente dell'amministratore e il nome di dominio completo (o indirizzo IP):

ssh azureuser@myvm.westus.cloudapp.azure.com

Se ci si connette per la prima volta a questa macchina virtuale, verrà chiesto di verificare l'impronta digitale dell'host. È tentata di accettare l'impronta digitale presentata, ma questo approccio ti espone a un possibile attacco di persona nel mezzo. È sempre necessario convalidare l'impronta digitale dell'host. È necessario eseguire questa operazione solo la prima volta che ci si connette da un client. Per ottenere l'impronta digitale dell'host tramite il portale, usare la funzionalità Esegui comando per eseguire il comando ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub | awk '{print $2}'.

Screenshot che mostra l'uso del comando Esegui per convalidare l'impronta digitale dell'host.

Per eseguire il comando usando l'interfaccia della riga di comando, usare az vm run-command invoke.

Se è stata specificata una passphrase quando è stata creata la coppia di chiavi, immettere tale passphrase quando richiesto durante il processo di accesso. La macchina virtuale viene aggiunta al file ~/.ssh/known_hosts e non verrà chiesto di connettersi di nuovo finché la chiave pubblica nella macchina virtuale di Azure non viene modificata o il nome server viene rimosso da ~/.ssh/known_hosts.

Se la macchina virtuale usa i criteri di accesso JIT, è necessario richiedere l'accesso per connettersi alla macchina virtuale. Per altre informazioni sui criteri JIT, vedere Gestire l'accesso alle macchine virtuali con la funzionalità JIT (Just-in-Time).

Passaggi successivi