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 vanilla 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 (normalmente 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 (opcionalmente, você pode passar a bandeira -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 doméstico, ou especifique um caminho alternativo.

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

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

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

Você deverá então ver o seguinte prompt:

Output
Enter passphrase (empty for no passphrase):

Aqui, opcionalmente, 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.

Você deverá então 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ê tem uma chave pública e privada que pode usar para autenticar. 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 (copiando via SSH baseado em senha ou copiando 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 que este método funcione, você já deve ter acesso SSH baseado em senha ao seu servidor.

Para usar a utilidade, você simplesmente precisa especificar o host remoto ao qual deseja se conectar e a conta de usuário à qual você tem acesso SSH baseado em senha. Esta é a conta para a qual sua chave pública SSH 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 o 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á escanear sua conta local pela chave id_rsa.pub que criamos anteriormente. Quando encontrar a chave, irá 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 da home da conta remota 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 Chave Pública Usando SSH

Se você não tem o ssh-copy-id disponível, mas tem 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 enviando isso através 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 sob a conta que estamos usando.

Então, podemos enviar o conteúdo que enviamos 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 as 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 remota:

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 até Passo 3 se isso for bem-sucedido.

Copiando Chave Pública Manualmente

Se você não tiver acesso SSH baseado em senha disponível para seu servidor, você terá que 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 disponível.

Depois de ter acesso à sua conta no servidor remoto, certifique-se de que o diretório ~/.ssh exista. 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 em seu sistema local. Deve começar com ssh-rsa AAAA....

Por fim, 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 você 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 ao 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 sucesso um dos procedimentos acima, você deverá ser capaz de 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 seu computador local não reconhece o host remoto. Digite “yes” e depois 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 que a digite agora (observe que suas teclas digitadas não serão exibidas na sessão do terminal por motivos de segurança). Após autenticar, uma nova sessão de shell deverá abrir para você com a conta configurada no servidor Debian.

Se a autenticação baseada em chave 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 em sua conta usando SSH sem uma senha, você configurou com sucesso a autenticação baseada em chave SSH para sua conta. No entanto, o mecanismo de autenticação baseado em senha ainda está ativo, o que significa que 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 chave SSH para a conta root neste servidor, ou preferencialmente, que você tenha configurado a autenticação baseada em chave SSH para uma conta não-root neste servidor com privilégios de sudo. Este passo irá restringir os logins baseados em senha, portanto, garantir que você ainda possa obter acesso administrativo é crucial.

Depois de ter confirmado que sua conta remota tem privilégios administrativos, faça login em 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 seu serviço SSH, você pode fechar com segurança todas as sessões atuais do servidor.

O daemon SSH em seu servidor Debian agora responde apenas a chaves SSH. A autenticação baseada em senha foi desativada com sucesso.

Conclusão

Agora você deve 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 o 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