Etapas detalhadas: Criar e gerenciar chaves SSH para autenticação para uma VM do Linux no Azure

Aplica-se a: ✔️ VMs do Linux ✔️ Conjuntos de dimensionamento flexíveis

Com um par de chaves de shell seguro (SSH), é possível criar máquinas virtuais (VMs) no Azure que usam chaves SSH para autenticação. Este artigo mostra como criar e usar rapidamente um par de arquivos de chaves SSH RSA pública e privada para conecções de cliente SSH.

Se você quiser comandos rápidos em vez de uma explicação mais detalhada das chaves SSH, consulte Como criar um par de chaves SSH público-privadas para VMs Linux no Azure.

Para criar chaves SSH e usá-las para se conectar a uma VM do Linux de um computador com Windows, consulte como usar chaves SSH com o Windows no Azure. Também é possível usar o portal do Azure para criar e gerenciar chaves SSH para criar VMs no Portal.

Visão geral do SSH e das chaves

SSH é um protocolo de conexão criptografado que fornece logins seguros em conexões não seguras. Embora o SSH forneça uma conexão criptografada, o uso de senhas com conexões SSH ainda deixa a VM vulnerável a ataques de força bruta. Recomendamos conectar a uma VM por SSH usando um par de chaves públicas-privadas, também conhecidas como chaves SSH.

  • A chave pública é colocada em sua VM.

  • A chave privada permanece em seu sistema local. Proteja essa chave privada. Não a compartilhe.

Quando você usa um cliente SSH para se conectar à sua VM (que tem a chave pública), a VM remota testa o cliente para certificar-se de que ele possui a chave privada correta. Se o cliente tiver a chave privada, será concedido o acesso à VM.

Dependendo das políticas de segurança da sua organização, você pode reutilizar um único par de chaves públicas e privadas para acessar vários serviços e VMs do Azure. Não é preciso um par de chaves separado para cada VM ou serviço que você deseja acessar.

Sua chave pública pode ser compartilhada com qualquer pessoa, mas apenas você (ou sua infraestrutura de segurança local) deve ter acesso à sua chave privada.

Formatos de chave SSH compatíveis

Atualmente, o Azure dá suporte aos seguintes tipos de chave:

  • Protocolo SSH 2 (SSH-2) RSA (Rivest, Shamir, Adleman) com um comprimento mínimo de 2048 bits
  • Chaves ED25519 com um comprimento fixo de 256 bits

Outros formatos importantes, como Elliptic-curve Diffie–Hellman (ECDH) e Elliptic Curve Digital Signature Algorithm (ECDSA), estão sem suporte atualmente.

Benefícios e uso das chaves SSH

Quando você criar uma VM do Azure especificando a chave pública, o Azure copia a chave pública (no formato .pub) para a pasta ~/.ssh/authorized_keys na VM. Chaves SSH em ~/.ssh/authorized_keys garantem que os clientes conectados apresentem a chave privada correspondente durante uma conexão SSH. Em uma VM Linux do Azure que usa chaves SSH para autenticação, o Azure desabilita o sistema de autenticação de senha do servidor SSH e permite apenas a autenticação de chave SSH. Ao criar VMs Linux do Azure com chaves SSH, você pode ajudar a proteger a implantação de VM e evitar a etapa de configuração pós-implantação típica de desabilitar as senhas no arquivo sshd_config.

Se não quiser usar chaves SSH, você ainda poderá configurar suas VMs Linux usando uma autenticação de senha. Se a VM não for exposta à Internet, o uso de senhas pode ser suficiente. No entanto, ainda será necessário gerenciar as senhas para cada VM Linux e manter as políticas e as práticas de senha íntegras, como o tamanho mínimo de senha e as atualizações regulares do sistema.

Gerar chaves com ssh-keygen

Para criar as chaves, um comando preferencial é ssh-keygen, que está disponível com utilitários do OpenSSH no Azure Cloud Shell, host do macOS ou Linux, e Windows (10 e 11). O ssh-keygen faz uma série de perguntas e, em seguida, grava uma chave privada e uma chave pública correspondente.

As chaves SSH são mantidas por padrão no diretório ~/.ssh. Se você não tiver um diretório ~/.ssh, o comando ssh-keygen o criará para você com as permissões corretas. Uma chave SSH é criada como um recurso e armazenada no Azure para uso posterior.

Observação

Você também pode criar chaves com a CLI do Azure com o comando AZ sshkey Create, conforme descrito em Gerar e armazenar chaves SSH.

Exemplo básico

O comando ssh-keygen a seguir gera arquivos de chave pública e privada SSH RSA de 4096 bits por padrão no diretório ~/.ssh. Se um par de chaves SSH existente for encontrado no local atual, esses arquivos serão substituídos.

ssh-keygen -m PEM -t rsa -b 4096

O comando ssh-keygen a seguir gera arquivos de chave pública e privada ED25519 de 256 bits por padrão no diretório ~/.ssh. Se um par de chaves SSH existente for encontrado no local atual, esses arquivos serão substituídos.

ssh-keygen -m PEM -t ed25519

Exemplo detalhado

O exemplo a seguir mostra as opções de comando adicionais para criar um par de chaves SSH RSA. Se um par de chaves SSH existir no local atual, esses arquivos serão substituídos.

ssh-keygen \
    -m PEM \
    -t rsa \
    -b 4096 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myrsaprivatekey \
    -N mypassphrase

O exemplo a seguir mostra opções de comando adicionais para criar um par de chaves ED25519 SSH. Se um par de chaves SSH existir no local atual, esses arquivos serão substituídos.

ssh-keygen \
    -m PEM \
    -t ed25519 \
    -C "azureuser@myserver" \
    -f ~/.ssh/mykeys/myedprivatekey \
    -N mypassphrase

Comando explicado

ssh-keygen = programa usado para criar as chaves

-m PEM = formatar a chave como PEM

-t rsa = tipo de chave a ser criada, nesse caso o formato de RSA

-b 4096 = o número de bits na chave, nesse caso, 4096

-C "azureuser@myserver" = um comentário acrescentado ao fim do arquivo de chave pública para identificá-lo facilmente. Normalmente, um endereço de email é usado como o comentário, mas você pode usar o que melhor funcionar para sua infraestrutura.

-f ~/.ssh/mykeys/myprivatekey = o nome do arquivo de chave privada se você optar por não usar o nome padrão. Um arquivo de chave pública correspondente é acrescentado com .pub e gerado no mesmo diretório. O diretório precisa existir.

-N mypassphrase = uma frase secreta adicional usada para acessar o arquivo de chave privada.

Exemplo de ssh-keygen (RSA)

ssh-keygen -t rsa -m PEM -b 4096 -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:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[RSA 4096]----+
|        .oE=*B*+ |
|          o+o.*++|
|           .oo++*|
|       .    .B+.O|
|        S   o=BO.|
|         . .o++o |
|        . ... .  |
|         ..  .   |
|           ..    |
+----[SHA256]-----+

Exemplo de ssh-keygen (ED25519)

ssh-keygen -t ed25519 -m PEM -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_ed25519.
Your public key has been saved in /home/azureuser/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:vFfHHrpSGQBd/oNdvNiX0sG9Vh+wROlZBktNZw9AUjA azureuser@myserver
The key's randomart image is:
+---[ED25519 256]----+
|                 |
|..  .            |
|o+.o       .     |
|*=o o   o + +    |
|*+o+   oSB + o   |
|**++o.+oo = .    |
|=+*..*.o E       |
|..  o o..        |
|     .o.         |
+----[SHA256]-----+

Arquivos de chave salvos

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

or

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

Os nomes de par de chaves padrão para RSA e ED25519 são id_rsa e id_ed25519 respectivamente; algumas ferramentas podem esperar o nome do arquivo da chave privada id_rsa ou id_ed25519, portanto, é uma boa ideia ter um. O diretório ~/.ssh/ é o local padrão para os pares de chave SSH e o arquivo de configuração SSH. Se não for especificado com um caminho completo, ssh-keygen criará as chaves no diretório de trabalho atual e não o ~/.ssh padrão.

Lista do diretório ~/.ssh

Para exibir os arquivos existentes no diretório ~/.ssh, execute o comando a seguir. Se nenhum arquivo for encontrado no diretório ou o próprio diretório estiver ausente, verifique se todos os comandos anteriores executaram com êxito. Talvez seja necessário acessar a raiz para modificar os arquivos nesse diretório em determinadas distribuições do Linux.

Par de chaves RSA:

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

Par de chaves ED25519:

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

Frase secreta da chave

Enter passphrase (empty for no passphrase):

É altamente recomendável adicionar uma frase secreta à sua chave privada. Sem uma frase secreta para proteger o arquivo de chave, qualquer pessoa com o arquivo poderá usá-lo para entrar em qualquer servidor com a chave pública correspondente. Portanto, adicionar uma frase secreta oferece mais proteção caso alguém obtenha acesso ao arquivo da chave privada, concedendo tempo para alterar as chaves.

Gerar chaves automaticamente durante a implantação

Se usar a CLI do Azure para criar a VM você poderá gerar, opcionalmente, os arquivos de chave SSH pública e privada executando o comando az vm create com a opção --generate-ssh-keys. Esse comando seria padrão para o tipo de chave RSA, a fim de gerar chaves ED25519 que você pode passar no comando de sinalizador --ssh-key-type adicional. As chaves são armazenadas no diretório ~/.ssh. Observe que essa opção de comando não substituirá as chaves já existentes nesse local, como algumas imagens pré-configuradas da Galeria de Computação.

Exemplo básico

Crie uma VM simples do Ubuntu Linux junto com o par de chaves SSH Ed25519.

az vm create -n MyVm -g MyResourceGroup --image Ubuntu2204 --generate-ssh-keys --ssh-key-type ed25519

Forneça a chave pública SSH ao implantar uma VM

Para criar uma VM Linux que usa chaves SSH para autenticação, forneça sua chave SSH pública ao criar a VM usando o Portal do Azure, a CLI, modelos do Resource Manager ou outros métodos. Ao usar o portal, insira a chave pública em si. Se você usar a CLI do Azure para criar a VM com uma chave pública existente, especifique o valor ou o local dessa chave pública executando o comando az vm create com a opção --ssh-key-value.

Se você não estiver familiarizado com o formato de uma chaves públicas SSH, veja sua chave pública executando cat da seguinte forma, substituindo ~/.ssh/id_rsa.pub por seu próprio local de arquivo de chave pública:

Par de chaves RSA

cat ~/.ssh/id_rsa.pub

A saída é semelhante à seguinte (exemplo redigido abaixo):

ssh-rsa XXXXXXXXXXc2EAAAADAXABAAABAXC5Am7+fGZ+5zXBGgXS6GUvmsXCLGc7tX7/rViXk3+eShZzaXnt75gUmT1I2f75zFn2hlAIDGKWf4g12KWcZxy81TniUOTjUsVlwPymXUXxESL/UfJKfbdstBhTOdy5EG9rYWA0K43SJmwPhH28BpoLfXXXXXG+/ilsXXXXXKgRLiJ2W19MzXHp8z3Lxw7r9wx3HaVlP4XiFv9U4hGcp8RMI1MP1nNesFlOBpG4pV2bJRBTXNXeY4l6F8WZ3C4kuf8XxOo08mXaTpvZ3T1841altmNTZCcPkXuMrBjYSJbA8npoXAXNwiivyoe3X2KMXXXXXdXXXXXXXXXXCXXXXX/ azureuser@myserver

Se você copiar e colar o conteúdo do arquivo de chave pública no Portal do Azure ou em um modelo do Resource Manager, não copie um espaço em branco adicional nem introduza quebras de linha adicionais. Por exemplo, caso use o macOS, direcione o arquivo de chave pública (por padrão, ~/.ssh/id_rsa.pub) para pbcopy para copiar o conteúdo (há outros programas Linux que fazem o mesmo, como o xclip).

Se preferir usar uma chave pública em formato multilinha, você poderá gerar uma chave formatada RFC4716 em um contêiner 'pem' a partir da chave pública criada anteriormente.

Para criar uma chave formatada RFC4716 com base em uma chave pública SSH existente:

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

Par de chaves ED25519

cat ~/.ssh/id_ed25519.pub

A saída é semelhante à seguinte (exemplo redigido abaixo):

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIP6I5JuhGq3RidMNpxrplIQwEfc4Rh7UyV8JYYH2U2xA azureuser@myserver

Se você copiar e colar o conteúdo do arquivo de chave pública no Portal do Azure ou em um modelo do Resource Manager, não copie um espaço em branco adicional nem introduza quebras de linha adicionais. Por exemplo, caso use o macOS, direcione o arquivo de chave pública (por padrão, ~/.ssh/id_ed25519.pub) para pbcopy para copiar o conteúdo (há outros programas Linux que fazem o mesmo, como o xclip).

Se preferir usar uma chave pública em formato multilinha, você poderá gerar uma chave formatada RFC4716 em um contêiner 'pem' a partir da chave pública criada anteriormente.

Para criar uma chave formatada PEM de uma chave pública SSH existente:

ssh-keygen \
-f ~/.ssh/id_ed25519.pub \
-e \
-m RFC4716 > ~/.ssh/id_edssh.pem

SSH para a VM com um cliente SSH

Com a chave pública implantada em sua VM do Azure e a chave privada em seu sistema local, realize SSH para sua VM usando o endereço IP ou nome DNS da VM. Substitua azureuser e myvm.westus.cloudapp.azure.com no comando a seguir pelo nome de usuário administrador e o nome de domínio totalmente qualificado (ou endereço IP):

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

Se você tiver fornecido uma senha ao criar o par de chaves, insira a senha quando receber a solicitação durante o processo de entrada. (O servidor é adicionado à sua pasta ~/.ssh/known_hosts e você não receberá uma solicitação para se conectar novamente até que a chave pública em sua VM do Azure mude ou o nome do servidor seja removido do ~/.ssh/known_hosts.)

Se a VM estiver usando a política de acesso Just-In-Time, você precisará solicitar acesso antes que possa se conectar à VM. Para obter mais informações sobre a política Just-In-Time, confira Gerenciar o acesso à máquina virtual usando a política Just-In-Time.

Usando ssh-agent para armazenar sua frase secreta da chave privada

Para evitar digitar frase secreta do arquivo de chave privada com cada logon de SSH, você poderá usar ssh-agent para armazenar em cache a frase secreta do arquivo de chave privada no sistema local. Se você estiver usando um Mac, o Keychain do macOS armazenará com segurança a frase secreta da chave privada ao invocar ssh-agent.

Verifique e use ssh-agent e ssh-add para informar o sistema SSH sobre os arquivos de chave, para que a frase secreta não precise ser usada interativamente.

eval "$(ssh-agent -s)"

Agora, adicione a chave privada ao ssh-agent usando o comando ssh-add.

ssh-add ~/.ssh/id_rsa

or

ssh-add ~/.ssh/id_ed25519

Agora, a frase secreta da chave privada está armazenada em ssh-agent.

Usar ssh-copy-id para copiar a chave para uma VM existente

Se já tiver criado uma VM, poderá adicionar a nova chave pública SSH à VM do Linux usando ssh-copy-id.

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

Criar e configurar um arquivo de configuração do SSH

Você pode criar e configurar um arquivo de configuração SSH (~/.ssh/config) para acelerar os logons e otimizar o comportamento do seu cliente SSH.

O exemplo a seguir mostra uma configuração simples que você pode usar para entrar rapidamente como um usuário para uma VM específica usando a chave privada SSH padrão.

Crie o arquivo.

touch ~/.ssh/config

Edite o arquivo para adicionar a nova configuração de SSH

vim ~/.ssh/config

Adicione os parâmetros de configurações apropriadas para a VM do seu host. Neste exemplo, o nome da VM (Host) é myvm, o nome da conta (Usuário) é azureuser e o Endereço IP ou FQDN (Nome do Host) é 192.168.0.255.

# Azure Keys
Host myvm
  Hostname 192.168.0.255
  User azureuser
# ./Azure Keys

Você pode acrescentar configurações para os hosts adicionais para permitir que cada um use seu próprio par de chaves dedicado. Consulte o arquivo de configuração SSH para obter mais opções de configuração avançadas.

Agora que você tem um par de chaves SSH e um arquivo de configuração SSH configurado, será possível acessar remotamente a VM Linux de forma rápida e segura. Quando você executa o comando a seguir, o SSH localiza e carrega as configurações do bloco Host myvm no arquivo de configuração SSH.

ssh myvm

Na primeira vez que você entrar em um servidor usando uma chave SSH, o comando solicitará a frase secreta para esse arquivo de chave.

Próximas etapas

A próxima etapa é criar VMs do Linux do Azure usando a nova chave pública SSH. As VMs do Azure criadas com uma chave pública SSH como a entrada estão mais protegidas do que as VMs criadas com as senhas do método de entrada padrão.