Procedura dettagliata per creare una coppia di chiavi SSH e certificati aggiuntivi per una VM Linux in AzureDetailed walk through to create an SSH key pair and additional certificates for a Linux VM in Azure

Con una coppia di chiavi SSH è possibile creare macchine virtuali in Azure che per impostazione predefinita usano le chiavi SSH per l'autenticazione, eliminando la necessità di password per l'accesso.With an SSH key pair, you can create Virtual Machines on Azure that default to using SSH keys for authentication, eliminating the need for passwords to log in. Le password sono intuibili e le macchine virtuali sono esposte a inesorabili tentativi di attacchi massicci per scoprire la password.Passwords can be guessed, and open your VMs up to relentless brute force attempts to guess your password. Le macchine virtuali create con l'interfaccia della riga di comando di Azure o i modelli di Resource Manager possono includere la chiave pubblica SSH durante la distribuzione, rimuovendo il passaggio della configurazione post-distribuzione di disattivazione degli account di accesso con password per SSH.VMs created with the Azure CLI or Resource Manager templates can include your SSH public key as part of the deployment, removing a post deployment configuration step of disabling password logins for SSH. Questo articolo illustra i passaggi dettagliati e offre esempi aggiuntivi per la generazione di certificati, ad esempio per l'uso con macchine virtuali di Linux.This article provides detailed steps and additional examples of generating certificates, such as for use with Linux virtual machines. Per creare rapidamente e usare una coppia di chiavi SSH, vedere Come creare una coppia di chiavi SSH pubblica e privata per le macchine virtuali Linux in Azure.If you want to quickly create and use an SSH key pair, see How to create an SSH public and private key pair for Linux VMs in Azure.

Informazioni sulle chiavi SSHUnderstanding SSH keys

L'uso di chiavi SSH pubbliche e private è il modo più semplice di accedere ai server Linux.Using SSH public and private keys is the easiest way to log in to your Linux servers. crittografia a chiave pubblica fornisce un modo molto più sicuro per accedere a una VM Linux o BSD in Azure rispetto all'uso di password, che possono essere molto più facilmente soggette ad attacchi di forza bruta.Public-key cryptography provides a much more secure way to log in to your Linux or BSD VM in Azure than passwords, which can be brute-forced far more easily.

La chiave pubblica può essere condivisa con chiunque, ma la chiave privata appartiene solo all'utente o all'infrastruttura di sicurezza locale.Your public key can be shared with anyone; but only you (or your local security infrastructure) possess your private key. La chiave privata SSH deve essere protetta da una password molto sicura (origine: xkcd.com).The SSH private key should have a very secure password (source:xkcd.com) to safeguard it. Questa password serve solo per accedere al file della chiave SSH privata e non è la password dell'account utente.This password is just to access the private SSH key file and is not the user account password. Quando si aggiunge una password alla chiave SSH, la chiave privata viene crittografata usando AES a 128 bit, in modo che non sia possibile usarla senza la password per decrittografarla.When you add a password to your SSH key, it encrypts the private key using 128-bit AES, so that the private key is useless without the password to decrypt it. Se un utente malintenzionato ruba una chiave privata priva di password, può usarla per accedere ai server che hanno la chiave pubblica corrispondente.If an attacker stole your private key and that key did not have a password, they would be able to use that private key to log in to any servers that have the corresponding public key. Una chiave privata protetta da password non può essere usata da utenti malintenzionati e rappresenta un livello di sicurezza aggiuntivo per l'infrastruttura in Azure.If a private key is password protected it cannot be used by that attacker, providing an additional layer of security for your infrastructure on Azure.

Questo articolo crea una coppia di file di chiavi pubblica e privata RSA protocollo SSH versione 2 (definite anche chiavi "ssh-rsa"), consigliate per le distribuzioni con Azure Resource Manager.This article creates an SSH protocol version 2 RSA public and private key file pair (also referred to as "ssh-rsa" keys), which are recommended for deployments with Azure Resource Manager. ssh-rsa sono necessarie nel portale per le distribuzioni sia classica che Resource Manager.ssh-rsa keys are required on the portal for both classic and Resource Manager deployments.

Uso e vantaggi delle chiavi SSHSSH keys use and benefits

Azure richiede almeno chiavi pubbliche e private in formato RSA protocollo SSH versione 2 a 2048 bit. Il file di chiave pubblica ha il formato di contenitore .pub.Azure requires at least 2048-bit, SSH protocol version 2 RSA format public and private keys; the public key file has the .pub container format. Per creare le chiavi, usare ssh-keygen, che presenta una serie di domande e quindi scrive una chiave privata e una pubblica corrispondente.To create the keys use ssh-keygen, which asks a series of questions and then writes a private key and a matching public key. Quando viene creata una VM di Azure, Azure copia la chiave pubblica nella cartella ~/.ssh/authorized_keys sulla VM.When an Azure VM is created, Azure copies the public key to the ~/.ssh/authorized_keys folder on the VM. Le chiavi SSH in ~/.ssh/authorized_keys vengono usate per fare in modo che il client trovi la chiave privata corrispondente in una connessione di accesso SSH.SSH keys in ~/.ssh/authorized_keys are used to challenge the client to match the corresponding private key on an SSH login connection. Quando viene creata una macchina virtuale Linux di Azure usando le chiavi SSH per l'autenticazione, Azure configura il server SSHD per non consentire l'accesso con password, ma solo con le chiavi SSH.When an Azure Linux VM is created using SSH keys for authentication, Azure configures the SSHD server to not allow password logins, only SSH keys. La creazione di macchine virtuali Linux in Azure con chiavi SSH consente di proteggere la distribuzione delle VM e di evitare l'esecuzione del passaggio di post-distribuzione tipico relativo alla disabilitazione delle password nel file sshd_config.Therefore, by creating Azure Linux VMs with SSH keys, you can help secure the VM deployment and save yourself the typical post-deployment configuration step of disabling passwords in the sshd_config file.

Uso di ssh-keygenUsing ssh-keygen

Questo comando crea una coppia di chiavi SSH protette da password (crittografate) usando RSA a 2048 bit impostata come commento per identificarla facilmente.This command creates a password secured (encrypted) SSH key pair using 2048-bit RSA and it is commented to easily identify it.

Per impostazione predefinita, le chiavi SSH vengono conservate nella directory ~/.ssh.SSH keys are by default kept in the ~/.ssh directory. Se non si dispone di una directory ~/.ssh, questa viene creata automaticamente dal comando ssh-keygen con le autorizzazioni corrette.If you do not have a ~/.ssh directory, the ssh-keygen command creates it for you with the correct permissions.

ssh-keygen \
    -t rsa \
    -b 2048 \
    -C "azureuser@myserver" \
    -f ~/.ssh/id_rsa \
    -N mypassword

Descrizione del comandoCommand explained

ssh-keygen: programma usato per creare le chiavi.ssh-keygen = the program used to create the keys

-t rsa = tipo di chiave da creare, in formato RSA -b 2048 = bit della chiave-t rsa = type of key to create which is the RSA format -b 2048 = bits of the key

-C "azureuser@myserver": commento aggiunto alla fine del file della chiave pubblica per identificarla facilmente.-C "azureuser@myserver" = a comment appended to the end of the public key file to easily identify it. In genere come commento viene usato un indirizzo di posta elettronica, ma è possibile usare qualsiasi elemento, in base alle esigenze dell'infrastruttura.Normally an email is used as the comment but you can use whatever works best for your infrastructure.

Distribuzione classica tramite asmClassic deploy using asm

Se si usa il modello di distribuzione classica (modalità asm nell'interfaccia della riga di comando), è possibile usare una chiave pubblica SSH-RSA o una chiave formattata RFC4716 in un contenitore PEM.If you are using the classic deployment model (asm mode in the CLI), you can use an SSH-RSA public key or an RFC4716 formatted key in a pem container. La chiave pubblica SSH-RSA corrisponde a quella creata in precedenza in questo articolo tramite ssh-keygen.The SSH-RSA public key is what was created earlier in this article using ssh-keygen.

Per creare una chiave in formato RFC4716 da una chiave pubblica SSH esistente:To create a RFC4716 formatted key from an existing SSH public key:

ssh-keygen \
-f ~/.ssh/id_rsa.pub \
-e \
-m RFC4716 > ~/.ssh/id_ssh2.pem

Esempio di ssh-keygenExample of ssh-keygen

ssh-keygen -t rsa -b 2048 -C "azureuser@myserver"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/azureuser/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/azureuser/.ssh/id_rsa.
Your public key has been saved in /home/azureuser/.ssh/id_rsa.pub.
The key fingerprint is:
14:a3:cb:3e:78:ad:25:cc:55:e9:0c:08:e5:d1:a9:08 azureuser@myserver
The keys randomart image is:
+--[ RSA 2048]----+
|        o o. .   |
|      E. = .o    |
|      ..o...     |
|     . o....     |
|      o S =      |
|     . + O       |
|      + = =      |
|       o +       |
|        .        |
+-----------------+

File delle chiavi salvati:Saved key files:

Enter file in which to save the key (/home/azureuser/.ssh/id_rsa): ~/.ssh/id_rsa

Nome della coppia di chiavi per questo articolo.The key pair name for this article. Una coppia di chiavi denominata id_rsa è disponibile per impostazione predefinita e alcuni strumenti potrebbero prevedere un file della chiave privata con nome id_rsa, quindi è opportuno averne uno.Having a key pair named id_rsa is the default and some tools might expect the id_rsa private key file name so having one is a good idea. La directory ~/.ssh/ è la posizione predefinita per le coppie di chiavi SSH e il file config SSH.The directory ~/.ssh/ is the default location for SSH key pairs and the SSH config file. Se non viene specificato con un percorso completo, ssh-keygen crea le chiavi nella directory di lavoro corrente, non nel percorso ~/.ssh predefinito.If not specified with a full path, ssh-keygen creates the keys in the current working directory, not the default ~/.ssh.

Un listato della directory ~/.ssh .A listing of the ~/.ssh directory.

ls -al ~/.ssh
-rw------- 1 azureuser staff  1675 Aug 25 18:04 id_rsa
-rw-r--r-- 1 azureuser staff   410 Aug 25 18:04 id_rsa.pub

Password della chiave:Key Password:

Enter passphrase (empty for no passphrase):

ssh-keygen indica una password per il file di chiave privata come "passphrase".ssh-keygen refers to a password for the private key file as "a passphrase." È vivamente consigliabile aggiungere una password alla chiave privata.It is strongly recommended to add a password to your private key. Senza una password che protegge il file di chiave, chiunque abbia il file può usarlo per accedere a qualsiasi server che ha la chiave pubblica corrispondente.Without a password protecting the key file, anyone with the file can use it to log in to any server that has the corresponding public key. L'aggiunta di una password (passphrase) offre protezione nel caso in cui qualcuno riesca ad accedere al file della chiave privata, consentendo all'utente il tempo necessario per modificare le chiavi usate per l'autenticazione.Adding a password (passphrase) offers more protection in case someone is able to gain access to your private key file, given you time to change the keys used to authenticate you.

Uso di ssh-agent per archiviare la password della chiave privataUsing ssh-agent to store your private key password

Per evitare di digitare la password del file della chiave privata a ogni accesso SSH, è possibile usare ssh-agent per memorizzare nella cache la password del file della chiave privata.To avoid typing your private key file password with every SSH login, you can use ssh-agent to cache your private key file password. Se si usa un Mac, il portachiavi OSX archivia in modo sicuro le password delle chiavi private quando si richiama ssh-agent.If you are using a Mac, the OSX Keychain securely stores the private key passwords when you invoke ssh-agent.

Verificare e usare ssh-agent e ssh-add per fornire informazioni al sistema SSH sui file delle chiavi, in modo che non sia necessario usare la passphrase in modo interattivo.Verify and use ssh-agent and ssh-add to inform the SSH system about the key files so that the passphrase will not need to be used interactively.

eval "$(ssh-agent -s)"

Ora aggiungere la chiave privata a ssh-agent usando il comando ssh-add.Now add the private key to ssh-agent using the command ssh-add.

ssh-add ~/.ssh/id_rsa

La password della chiave privata viene ora archiviata in ssh-agent.The private key password is now stored in ssh-agent.

Uso di ssh-copy-id per copiare la chiave in una VM esistenteUsing ssh-copy-id to copy the key to an existing VM

Se è già stata creata una macchina virtuale, è possibile installare la nuova chiave SSH pubblica nella VM Linux con:If you have already created a VM you can install the new SSH public key to your Linux VM with:

ssh-copy-id -i ~/.ssh/id_rsa.pub ahmet@myserver

Creare e configurare un file config SSHCreate and configure an SSH config file

È una procedura consigliata creare e configurare un file ~/.ssh/config per velocizzare gli accessi e ottimizzare il comportamento del client SSH.It is a recommended best practice to create and configure an ~/.ssh/config file to speed up log ins and for optimizing your SSH client behavior.

L'esempio seguente illustra una configurazione standard.The following example shows a standard configuration.

Creare il fileCreate the file

touch ~/.ssh/config

Modificare il file aggiungendo la nuova configurazione SSH:Edit the file to add the new SSH configuration:

vim ~/.ssh/config

File ~/.ssh/config di esempio:Example ~/.ssh/config file:

# Azure Keys
Host fedora22
  Hostname 102.160.203.241
  User ahmet
# ./Azure Keys
# Default Settings
Host *
  PubkeyAuthentication=yes
  IdentitiesOnly=yes
  ServerAliveInterval=60
  ServerAliveCountMax=30
  ControlMaster auto
  ControlPath ~/.ssh/SSHConnections/ssh-%r@%h:%p
  ControlPersist 4h
  IdentityFile ~/.ssh/id_rsa

Questo file config SSH include sezioni per ogni server, per consentire a ognuno di essi di avere una coppia di chiavi dedicata.This SSH config gives you sections for each server to enable each to have its own dedicated key pair. Le impostazioni predefinite (Host *) sono valide per tutti gli host che non corrispondono ad alcuno degli host specifici indicati sopra nel file config.The default settings (Host *) are for any hosts that do not match any of the specific hosts higher up in the config file.

Descrizione del file configConfig file explained

Host : nome dell'host chiamato sul terminale.Host = the name of the host being called on the terminal. ssh fedora22 indica a SSH di usare i valori nel blocco di impostazioni con l'etichetta Host fedora22. NOTA: l'Host può essere qualsiasi etichetta logica per il proprio uso e non rappresenta il nome host effettivo di un server.ssh fedora22 tells SSH to use the values in the settings block labeled Host fedora22 NOTE: Host can be any label that is logical for your usage and does not represent the actual hostname of any server.

Hostname 102.160.203.241: indirizzo IP o nome DNS del server a cui si accede.Hostname 102.160.203.241 = the IP address or DNS name for the server being accessed.

User ahmet = account utente remoto da usare quando si accede al server.User ahmet = the remote user account to use when logging in to the server.

PubKeyAuthentication yes: indica a SSH che si vuole usare una chiave SSH per l'accesso.PubKeyAuthentication yes = tells SSH you want to use an SSH key to log in.

IdentityFile /home/ahmet/.ssh/id_id_rsa: chiave privata SSH e chiave pubblica corrispondente da usare per l'autenticazione.IdentityFile /home/ahmet/.ssh/id_id_rsa = the SSH private key and corresponding public key to use for authentication.

Usare SSH per accedere a Linux senza passwordSSH into Linux without a password

Con una coppia di chiavi SSH e un file config SSH configurato è ora possibile accedere alla VM Linux in modo rapido e sicuro.Now that you have an SSH key pair and a configured SSH config file, you are able to log in to your Linux VM quickly and securely. La prima volta che si accede a un server con una chiave SSH, il comando richiede la passphrase per il file della chiave.The first time you log in to a server using an SSH key the command prompts you for the passphrase for that key file.

ssh fedora22

Descrizione del comandoCommand explained

Quando si esegue ssh fedora22, SSH trova e carica prima di tutto le impostazioni dal blocco Host fedora22 e quindi carica tutte le impostazioni rimanenti dell'ultimo blocco Host *.When ssh fedora22 is executed SSH first locates and loads any settings from the Host fedora22 block, and then loads all the remaining settings from the last block, Host *.

Passaggi successiviNext Steps

Il prossimo passaggio consiste nel creare VM Linux di Azure usando la nuova chiave pubblica SSH.Next up is to create Azure Linux VMs using the new SSH public key. Le VM di Azure create con una chiave pubblica SSH come account di accesso sono più protette rispetto alle VM create con il metodo di accesso predefinito basato su password.Azure VMs that are created with an SSH public key as the login are better secured than VMs created with the default login method, passwords. Per impostazione predefinita, le VM di Azure create con le chiavi SSH vengono configurate con le password disabilitate, evitando tentativi di attacco basati su forza bruta per scoprire le password.Azure VMs created using SSH keys are by default configured with passwords disabled, avoiding brute-forced guessing attempts.