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-agent
o .
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-id
o .
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.