Como configurar chaves SSH no Debian 11

Introdução

O SSH, ou shell seguro, é um protocolo criptografado usado para administrar e comunicar com servidores. Ao trabalhar com um servidor Debian, é provável que você passe a maior parte do tempo em uma sessão de terminal conectada ao seu servidor através do SSH.

Neste guia, vamos nos concentrar em configurar chaves SSH para uma instalação padrão do Debian 11. As chaves SSH fornecem uma maneira fácil e segura de fazer login no seu servidor e são recomendadas para todos os usuários.

Passo 1 — Criar o Par de Chaves RSA

O primeiro passo é criar um par de chaves na máquina cliente (geralmente seu computador):

  1. ssh-keygen

Por padrão, o ssh-keygen criará um par de chaves RSA de 3072 bits, o que é seguro o suficiente para a maioria dos casos de uso (você pode opcionalmente passar a flag -b 4096 para criar uma chave maior de 4096 bits).

Após inserir o comando, você deverá ver a seguinte saída:

Output
Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):

Pressione Enter para salvar o par de chaves no subdiretório .ssh/ em seu diretório pessoal, ou especifique um caminho alternativo.

Se você já gerou anteriormente um par de chaves SSH, poderá ver o seguinte prompt:

Output
/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?

Aviso: Se você optar por sobrescrever a chave no disco, não será possível autenticar usando a chave anterior novamente. Tenha muito cuidado ao selecionar sim, pois este é um processo destrutivo que não pode ser revertido.

Você deve então ver o seguinte prompt:

Output
Enter passphrase (empty for no passphrase):

Aqui, opcionalmente, você pode inserir uma frase secreta segura, o que é altamente recomendado. Uma frase secreta adiciona uma camada adicional de segurança para evitar que usuários não autorizados façam login. Para saber mais sobre segurança, consulte nosso tutorial sobre Como Configurar Autenticação Baseada em Chave SSH em um Servidor Linux.

Então, você deve ver a seguinte saída:

Output
Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata The key's randomart image is: +---[RSA 3072]----+ | oo .O^XB| | . +.BO%B| | . = .+B+o| | o o o . =.| | S . . =| | o.| | .o| | E o..| | . ..| +----[SHA256]-----+

Agora você possui uma chave pública e privada que pode usar para autenticação. O próximo passo é colocar a chave pública em seu servidor para poder usar a autenticação baseada em chave SSH para fazer login.

Passo 2 — Copie a Chave Pública para o Servidor Debian

A maneira mais rápida de copiar sua chave pública para o host Debian é usar um utilitário chamado ssh-copy-id. Devido à sua simplicidade, este método é altamente recomendado se estiver disponível. Se você não tiver ssh-copy-id disponível em sua máquina cliente, pode usar um dos dois métodos alternativos fornecidos nesta seção (copiar via SSH baseado em senha, ou copiar manualmente a chave).

Copiando Chave Pública Usando ssh-copy-id

A ferramenta ssh-copy-id está incluída por padrão em muitos sistemas operacionais, então você pode tê-la disponível no seu sistema local. Para este método funcionar, você deve ter acesso SSH baseado em senha ao seu servidor.

Para usar a utilidade, você simplesmente precisa especificar o host remoto ao qual gostaria de se conectar e a conta de usuário à qual você tem acesso SSH baseado em senha. Esta é a conta para a qual sua chave SSH pública será copiada.

A sintaxe é:

  1. ssh-copy-id username@remote_host

Você pode ver a seguinte mensagem:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Isto significa que seu computador local não reconhece o host remoto. Isso acontecerá na primeira vez que você se conectar a um novo host. Digite “yes” e pressione ENTER para continuar.

Em seguida, a utilidade irá examinar sua conta local para a chave id_rsa.pub que criamos anteriormente. Quando encontrar a chave, solicitará a senha da conta do usuário remoto:

Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys username@203.0.113.1's password:

Digite a senha (sua digitação não será exibida por motivos de segurança) e pressione ENTER. A utilidade se conectará à conta no host remoto usando a senha fornecida. Em seguida, copiará o conteúdo da sua chave ~/.ssh/id_rsa.pub para um arquivo no diretório ~/.ssh do usuário remoto chamado authorized_keys.

Você deverá ver a seguinte saída:

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'username@203.0.113.1'" and check to make sure that only the key(s) you wanted were added.

Neste ponto, sua chave id_rsa.pub foi enviada para a conta remota. Você pode prosseguir para Passo 3.

Copiando a Chave Pública Usando SSH

Se você não tiver o ssh-copy-id disponível, mas tiver acesso SSH baseado em senha a uma conta em seu servidor, você pode enviar suas chaves usando um método SSH convencional.

Podemos fazer isso usando o comando cat para ler o conteúdo da chave pública SSH em nosso computador local e encaminhando isso por meio de uma conexão SSH para o servidor remoto.

Do outro lado, podemos garantir que o diretório ~/.ssh exista e tenha as permissões corretas na conta que estamos usando.

Podemos então enviar o conteúdo que encaminhamos para um arquivo chamado authorized_keys dentro deste diretório. Usaremos o símbolo de redirecionamento >> para anexar o conteúdo em vez de sobrescrevê-lo. Isso nos permitirá adicionar chaves sem destruir chaves adicionadas anteriormente.

O comando completo se parece com isso:

  1. cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

Você pode ver a seguinte mensagem:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Isso significa que seu computador local não reconhece o host remoto. Isso acontecerá na primeira vez que você se conectar a um novo host. Digite “yes” e pressione ENTER para continuar.

Depois, você deve ser solicitado a inserir a senha da conta de usuário remoto:

Output
username@203.0.113.1's password:

Após inserir sua senha, o conteúdo da sua chave id_rsa.pub será copiado para o final do arquivo authorized_keys da conta de usuário remoto. Continue para Etapa 3 se isso foi bem-sucedido.

Copiando Chave Pública Manualmente

Se você não tiver acesso SSH baseado em senha disponível para seu servidor, será necessário completar o processo acima manualmente.

Vamos anexar manualmente o conteúdo do seu arquivo id_rsa.pub ao arquivo ~/.ssh/authorized_keys em sua máquina remota.

Para exibir o conteúdo da sua chave id_rsa.pub, digite isso em seu computador local:

  1. cat ~/.ssh/id_rsa.pub

Você verá o conteúdo da chave, que deve se parecer com isso:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test

Acesse seu host remoto usando o método que estiver disponível.

Assim que tiver acesso à sua conta no servidor remoto, certifique-se de que o diretório ~/.ssh existe. Este comando criará o diretório, se necessário, ou não fará nada se ele já existir:

  1. mkdir -p ~/.ssh

Agora, você pode criar ou modificar o arquivo authorized_keys dentro deste diretório. Você pode adicionar o conteúdo do seu arquivo id_rsa.pub ao final do arquivo authorized_keys, criando-o se necessário, usando este comando:

  1. echo public_key_string >> ~/.ssh/authorized_keys

No comando acima, substitua public_key_string pela saída do comando cat ~/.ssh/id_rsa.pub que você executou no seu sistema local. Deve começar com ssh-rsa AAAA....

Finalmente, vamos garantir que o diretório ~/.ssh e o arquivo authorized_keys tenham as permissões apropriadas definidas:

  1. chmod -R go= ~/.ssh

Isso remove recursivamente todas as permissões de “grupo” e “outros” para o diretório ~/.ssh/.

Se estiver usando a conta root para configurar chaves para uma conta de usuário, também é importante que o diretório ~/.ssh pertença ao usuário e não a root:

  1. chown -R sammy:sammy ~/.ssh

Neste tutorial, nosso usuário é chamado sammy, mas você deve substituir o nome de usuário apropriado no comando acima.

Agora você pode tentar autenticação sem senha com seu servidor Debian.

Passo 3 — Autenticar no Servidor Debian Usando Chaves SSH

Se você concluiu com êxito um dos procedimentos acima, deverá conseguir fazer login no host remoto sem a senha da conta remota.

O processo geral é o mesmo:

  1. ssh username@remote_host

Se esta for a primeira vez que você está se conectando a este host (se você usou o último método acima), você pode ver algo assim:

Output
The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes

Isso significa que o seu computador local não reconhece o host remoto. Digite “yes” e pressione ENTER para continuar.

Se você não forneceu uma frase secreta para sua chave privada, será conectado imediatamente. Se você forneceu uma frase secreta para a chave privada quando a criou, será solicitado a inseri-la agora (observe que suas teclas digitadas não serão exibidas na sessão do terminal por motivos de segurança). Após a autenticação, uma nova sessão de shell deve ser aberta para você com a conta configurada no servidor Debian.

Se a autenticação baseada em chaves foi bem-sucedida, continue aprendendo como aumentar a segurança do seu sistema desabilitando a autenticação por senha.

Passo 4 — Desabilitar a Autenticação por Senha no seu Servidor

Se você conseguiu fazer login na sua conta usando SSH sem uma senha, você configurou com sucesso a autenticação baseada em chave SSH para a sua conta. No entanto, o mecanismo de autenticação baseado em senha ainda está ativo, o que significa que o seu servidor ainda está exposto a ataques de força bruta.

Antes de concluir as etapas desta seção, certifique-se de que você tenha configurado a autenticação baseada em chaves SSH para a conta root neste servidor, ou de preferência, que você tenha configurado a autenticação baseada em chaves SSH para uma conta não-root neste servidor com privilégios de sudo. Este passo bloqueará as entradas baseadas em senha, então garantir que você ainda será capaz de obter acesso administrativo é crucial.

Depois de confirmar que sua conta remota tem privilégios administrativos, faça login no seu servidor remoto com chaves SSH, seja como root ou com uma conta com privilégios de sudo. Em seguida, abra o arquivo de configuração do daemon SSH:

  1. sudo nano /etc/ssh/sshd_config

Dentro do arquivo, procure por uma diretiva chamada PasswordAuthentication. Isso pode estar comentado. Descomente a linha e defina o valor como “no”. Isso desabilitará sua capacidade de fazer login via SSH usando senhas de conta:

/etc/ssh/sshd_config
...
PasswordAuthentication no
...

Salve e feche o arquivo quando terminar, pressionando CTRL + X, depois Y para confirmar a gravação do arquivo, e finalmente ENTER para sair do nano. Para realmente implementar essas alterações, precisamos reiniciar o serviço sshd:

  1. sudo systemctl restart ssh

Como precaução, abra uma nova janela de terminal e teste se o serviço SSH está funcionando corretamente antes de fechar esta sessão:

  1. ssh username@remote_host

Depois de verificar o serviço SSH, você pode fechar com segurança todas as sessões de servidor atuais.

O daemon SSH no seu servidor Debian agora responde apenas às chaves SSH. A autenticação baseada em senha foi desabilitada com sucesso.

Conclusão

Você deve agora ter a autenticação baseada em chave SSH configurada no seu servidor, permitindo que você faça login sem fornecer uma senha de conta.

Se você gostaria de aprender mais sobre como trabalhar com SSH, dê uma olhada no nosso Guia Essencial do SSH.

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11