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

Aplica-se a: ✔️ Linux VMs ✔️ Conjuntos de escala flexível

Com um par de chaves de shell seguro (SSH), você pode criar uma máquina virtual Linux que usa chaves SSH para autenticação. Este artigo mostra como criar e usar um par de arquivos de chave pública-privada RSA SSH para conexõ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 público-privado SSH para VMs Linux no Azure.

Para criar chaves SSH e usá-las para se conectar a uma VM Linux a partir de um computador Windows , consulte Como usar chaves SSH com o Windows no Azure. Você também pode usar o portal do Azure para criar e gerenciar chaves SSH para criar VMs no portal.

Visão geral de SSH e chaves

SSH é um protocolo de conexão criptografado que fornece entradas seguras 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-se a uma VM por SSH usando um par de chaves público-privado, também conhecido como chaves SSH.

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

  • A chave privada permanece no seu sistema local. Proteja esta chave privada. Não a partilhe.

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 tem a chave privada correta. Se o cliente tiver a chave privada, ele terá acesso à VM.

Dependendo das políticas de segurança da sua organização, pode reutilizar um único par de chaves público-privado para aceder a várias VMs e serviços do Azure. Você não precisa de um par separado de chaves para cada VM ou serviço que deseja acessar.

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

Formatos de chave SSH suportados

Atualmente, o Azure suporta os seguintes tipos de chave:

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

Outros formatos importantes, como Elliptic-curve Diffie-Hellman (ECDH) e Elliptic Curve Digital Signature Algorithm (ECDSA) não são suportados atualmente.

Utilização e vantagens das chaves SSH

Quando você cria uma VM do Azure especificando a chave pública, o Azure copia .pub a chave pública (no formato) para a ~/.ssh/authorized_keys pasta na VM. Chaves SSH para ~/.ssh/authorized_keys garantir 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 uma VM Linux do Azure com chaves SSH, você pode ajudar a proteger a implantação da VM e salvar a etapa típica de configuração pós-implantação de desabilitar senhas no sshd_config arquivo.

Se você não deseja usar chaves SSH, você pode configurar sua VM Linux para usar autenticação de senha. Se a sua VM não estiver exposta à Internet, o uso de senhas pode ser suficiente. No entanto, você ainda precisa gerenciar suas senhas para cada VM Linux e manter políticas e práticas de senha saudáveis, como comprimento mínimo de senha e atualizações regulares do sistema.

Gerar chaves com ssh-keygen

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

Por predefinição, as chaves SSH são mantidas no diretório ~/.ssh. Se não tiver um diretório ~/.ssh, o comando ssh-keygen cria-o por si com as permissões corretas. Uma chave SSH é criada como um recurso e armazenada no Azure para uso posterior.

Nota

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 a seguir ssh-keygen gera arquivos de chave pública e privada RSA SSH de 4096 bits por padrão no ~/.ssh diretório. 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 a seguir ssh-keygen gera arquivos de chave pública e privada de 256 bits ED25519 por padrão no ~/.ssh diretório. 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 opções de comando adicionais para criar um par de chaves SSH RSA. Se existir um par de chaves SSH 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 SSH ED25519. Se existir um par de chaves SSH 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 = o programa utilizado para criar as chaves

-m PEM = formatar a chave como PEM

-t rsa = tipo de chave a criar, neste caso no formato RSA

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

-C "azureuser@myserver" = um comentário acrescentado ao final do ficheiro da chave pública para o identificar facilmente. Normalmente, um endereço de e-mail é usado como comentário, mas use o que funcionar melhor 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 anexado com .pub é gerado no mesmo diretório. O diretório tem de existir.

-N mypassphrase = uma frase secreta adicional utilizada para aceder ao ficheiro 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

ou

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

Os nomes de pares de chaves padrão para RSA e ED25519 são id_rsa e id_ed25519 respectivamente, algumas ferramentas podem esperar o nome do id_rsa arquivo de chave privada ou id_ed25519 privada, então ter um é uma boa ideia. O diretório ~/.ssh/ é a localização predefinida de todos os pares de chaves SSH e do ficheiro de configuração SSH. Se não for especificado com um caminho completo, a ssh-keygen cria as chaves no atual diretório de trabalho, não a predefinição ~/.ssh.

Lista do ~/.ssh repertório

Para exibir arquivos existentes no ~/.ssh diretório, execute o seguinte comando. Se nenhum arquivo for encontrado no diretório ou se o próprio diretório estiver faltando, certifique-se de que todos os comandos anteriores foram executados com êxito. Você pode precisar de acesso root para modificar arquivos neste diretório em determinadas distribuições 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

ED25519 Par de chaves:

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-chave

Enter passphrase (empty for no passphrase):

É altamente recomendável adicionar uma frase secreta à sua chave privada. Sem uma senha para proteger o arquivo de chave, qualquer pessoa com o arquivo pode usá-lo para entrar em qualquer servidor que tenha a chave pública correspondente. Adicionar uma frase secreta oferece mais proteção no caso de alguém conseguir aceder ao seu ficheiro de chave privada, dando-lhe tempo para alterar as chaves.

Gerar chaves automaticamente durante a implantação

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

Exemplo básico

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

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

Fornecer chave pública SSH ao implantar uma VM

Para criar uma VM Linux que usa chaves SSH para autenticação, forneça sua chave pública SSH ao criar a VM usando o portal do Azure, a CLI, os modelos do Gerenciador de Recursos ou outros métodos. Ao usar o portal, você insere a própria chave pública. Se você usar a CLI do Azure para criar sua 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 --ssh-key-value opção.

Se você não estiver familiarizado com o formato de uma chave pública SSH, poderá ver sua chave pública executando cat da seguinte forma, substituindo ~/.ssh/id_rsa.pub pelo 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 editado 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 Gerenciador de Recursos, certifique-se de não copiar nenhum espaço em branco adicional ou introduzir quebras de linha adicionais. Por exemplo, se você usa macOS, você pode canalizar 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 a mesma coisa, como xclip).

Se preferir usar uma chave pública que esteja em um formato de várias linhas, você pode gerar uma chave formatada RFC4716 em um contêiner 'pem' a partir da chave pública que você criou anteriormente.

Para criar uma chave formatada RFC4716 a partir de uma chave pública SSH existente:

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

ED25519 par de chaves

cat ~/.ssh/id_ed25519.pub

A saída é semelhante à seguinte (exemplo editado 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 Gerenciador de Recursos, certifique-se de não copiar nenhum espaço em branco adicional ou introduzir quebras de linha adicionais. Por exemplo, se você usa macOS, você pode canalizar 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 a mesma coisa, como xclip).

Se preferir usar uma chave pública que esteja em um formato de várias linhas, você pode gerar uma chave formatada RFC4716 em um contêiner 'pem' a partir da chave pública que você criou anteriormente.

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

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

SSH para sua VM com um cliente SSH

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

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

Se você forneceu uma senha quando criou seu par de chaves, insira a senha quando solicitado durante o processo de entrada. (O servidor é adicionado à pasta ~/.ssh/known_hosts e não lhe será pedido para ligar novamente até a chave pública na VM do Azure ser alterada ou o nome do servidor ser removido do ~/.ssh/known_hosts.)

Se a VM estiver usando a política de acesso just-in-time, você precisará solicitar acesso antes de se conectar à VM. Para obter mais informações sobre a política just-in-time, consulte Gerenciar o acesso à máquina virtual usando a política just in time.

Use o ssh-agent para armazenar sua senha de chave privada

Para evitar digitar sua senha de arquivo de chave privada a cada entrada SSH, você pode usar ssh-agent para armazenar em cache sua senha de arquivo de chave privada em seu sistema local. Se estiver a utilizar um Mac, o Porta-chaves macOS armazena de forma segura a frase secreta da chave privada quando invoca ssh-agento .

Verifique e use ssh-agent e ssh-add informe o sistema SSH sobre os arquivos de chave para que você não precise usar a senha interativamente.

eval "$(ssh-agent -s)"

Em seguida, adicione a chave privada a ssh-agent utilizando o comando ssh-add.

ssh-add ~/.ssh/id_rsa

ou

ssh-add ~/.ssh/id_ed25519

A senha da chave privada agora está armazenada no ssh-agent.

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

Se você já criou uma VM, pode adicionar uma nova chave pública SSH à sua VM Linux usando ssh-copy-ido .

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

Criar e configurar um ficheiro de configuração SSH

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

O exemplo a seguir mostra uma configuração simples que você pode usar para entrar rapidamente como um usuário em 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 SSH

vim ~/.ssh/config

Adicione definições de configuração apropriadas para sua VM host. Neste exemplo, o nome da VM (Host) é myvm, o nome da conta (User) é azureuser e o endereço IP ou FQDN (Hostname) é 192.168.0.255.

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

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

Agora que você tem um par de chaves SSH e um arquivo de configuração SSH configurado, você pode acessar remotamente sua VM Linux de forma rápida e segura. Quando você executa o comando a seguir, o SSH localiza e carrega todas as configurações do Host myvm bloco 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 senha para esse arquivo de chave.

Próximos passos

O passo seguinte consiste na criação de VMs com Linux do Azure utilizando a nova chave pública SSH. As VMs do Azure que são criadas com uma chave pública SSH como entrada são mais bem protegidas do que as VMs criadas com o método de entrada padrão, senhas.