Como usar chaves SSH para se conectar a um servidor Linux

por | 24/03/2023 | Servidores

Através deste tutorial você entenderá o que são chaves SSH e como elas podem ser utilizadas na conexão SSH com servidores Linux.

Utilizar SSH keys facilita bastante o acesso a máquinas remotas, além de contribuir para aumentar a segurança dos ambientes nos quais você trabalha.

Além disso, é bom lembrar também que publicamos alguns outros guias recentemente, e eles envolvem justamente a segurança do SSH. Dê uma olhada:

Os procedimentos descritos neste guia podem ser executados em servidores Linux dedicados, VPS ou cloud.

Além disso, aliando estes procedimentos às dicas fornecidas nos guias acima citados, você pode reforçar ainda mais a segurança do seu servidor.

Pré-requisitos

Agora, confira alguns pré-requisitos para a correta aplicação deste guia:

Sistema/FerramentaPré-requisito
Sistema localLinux/Unix, macOS ou Windows*
Sistema remotoLinux/Unix
Ferramenta localUm Cliente SSH qualquer (o próprio terminal, no Linux ou macOS)
Ferramenta remotaServidor SSH

* um cliente SSH como o PuTTY também pode ser utilizado.

O que são chaves SSH

Você pode se conectar a servidores SSH remotos através de vários métodos. Um deles se baseia no uso de senhas, apenas, e você deve evitá-lo sempre que possível.

Permitir que um servidor SSH remoto possa ser acessado através de um simples conjunto de usuário e senha (mesmo que forte) pode representar uma verdadeira “porta de entrada” para ações indesejadas.

Nesse sentido, vale também dizer que scripts automatizados são atualmente capazes de “forçar a entrada” de maneira até bem fácil, principalmente nos casos em que senhas fracas são utilizadas.

Entretanto, ao utilizar chaves SSH para autenticação, você garante muito mais segurança e tranquilidade, além de agilidade. Através das chaves privada e pública, servidor remoto e máquina local “conversam” entre si.

Assim, o acesso ao servidor é liberado ou não, dependendo de como tudo transcorre. Além disso, como você já deve ter percebido, as chaves SSH funcionam em pares: há a chave pública e a chave privada.

Como funcionam as chaves SSH

Trata-se de um conjunto de chaves criptografadas capazes de assegurar a autenticação. Você deve manter uma chave privada armazenada localmente, de preferência em um local seguro e com as permissões de acesso devidamente ajustadas.

Em seguida, é necessário que você copie a chave pública para os servidores nos quais necessita de acesso. Esta chave pode inclusive ser compartilhada sem qualquer risco.

As chaves pública e privada funcionam sempre em “dupla”, sendo que o elemento privado (private key) é o único capaz de descriptografar as informações criptografadas pelo elemento público (public key).

Assim, é fácil perceber que você pode logar em qualquer máquina remota que possua a sua chave pública armazenada no diretório correto. Para isto, basta que você também esteja em posse da chave privada correspondente/autorizada.

Ou seja, no momento de uma tentativa de conexão através de chaves SSH, o servidor remoto verifica se o cliente está em posse de uma chave privada correspondente, e então libera o acesso caso esta realmente exista.

Neste modo seguro de acesso ao SSH, a utilização de uma senha é desnecessária, embora também seja possível proteger sua chave privada deste modo, para ainda mais segurança.

Onde ficam as chaves?

Por padrão, as chaves SSH são armazenadas no diretório ~/.ssh. Ou seja, trata-se de um diretório oculto, localizado dentro da pasta home do usuário.

É interessante mencionar também que dentro deste diretório existe um arquivo chamado authorized_keys. Tal arquivo, no computador remoto, contém as chaves públicas com permissão de acesso SSH.

No momento do pedido de autenticação, o servidor fará uma verificação neste arquivo, checando se você realmente está em posse de uma chave privada que pertence ao mesmo par (esta, armazenada localmente).

Assim, perceba porque trabalhamos sempre com um par de chaves (key pair), e porque este método de acesso ao SSH é muito mais seguro.

Obviamente, se alguma outra pessoa obter acesso à sua chave privada, ela também será capaz de se conectar ao servidor através do shell seguro.

É por este motivo que é imprescindível mantê-la à salvo, até mesmo porque ela possibilita logins rápidos e sem uso de senhas (basta um ssh usuário@IP_do_Servidor para a autenticação).

Porém, não se preocupe: este guia também fornece algumas dicas para que você proteja suas chaves. Além disso, segue abaixo um breve descritivo de alguns termos relacionados:

  • ~/.ssh/authorized_keys: arquivo que guarda as chaves públicas autorizadas, na máquina remota;
  • ~/.ssh/id_rsa: esta é a chave privada (armazenada localmente);
  • ~/.ssh/id_rsa.pub: chave pública (deve ser copiada para o servidor remoto);

Como gerar as chaves SSH

O processo de geração das chaves SSH é bem simples, e deve ser feito na máquina cliente. Em primeiro lugar, acesse um terminal e digite o comando abaixo:

ssh-keygen -t rsa

Logo a seguir, a ferramenta iniciará o processo de criação do key pair (par de chaves). Uma pergunta inicial é feita, e ela diz respeito ao arquivo e ao diretório onde as chaves serão geradas.

Eu recomendo que você não altere nada, aqui. Permaneça com o padrão sugerido, apenas teclando ENTER. Continuando, o componente de geração das chaves pede que você informe uma passphrase.

Na verdade, aqui o utilitário está perguntando se você deseja informar uma frase secreta, uma senha, para que ele então criptografe a sua chave privada.

Embora seja totalmente possível trabalhar com chaves SSH sem utilizar senha alguma, eu recomendo firmemente que você proteja sua chave privada com uma passphrase (robusta).

Em outras palavras: agindo assim você adiciona uma camada extra de proteção ao conjunto, e mesmo que algum atacante e/ou pessoa não autorizada obtenha acesso à sua chave privada, ainda assim será necessário conhecer a frase secreta para descriptografá-la.

Ou seja, em uma situação assim esta hipotética pessoa ainda estará impedida de acessar os seus servidores. Isto pode até mesmo fornecer algum tempo para que você então corrija o problema, substituindo o key pair comprometido.

Agora, continuando com o processo de geração das chaves, após informar e confirmar a sua passphrase (ou não), tecle ENTER e o processo será finalizado.

Obs: caso não deseje utilizar uma senha em conjunto com sua chave privada, basta teclar ENTER sem digitar nada, duas vezes seguidas.

Neste momento, você obterá uma saída parecida com a imagem abaixo:

Pronto! Você acabou de criar um par de chaves para a autenticação SSH.

Como copiar a chave pública SSH para o servidor remoto

Agora que você gerou seu par de chaves RSA, chegou o momento de copiar a chave pública para o servidor remoto.

Assim, você será capaz de se logar via SSH de forma prática e segura. Caso você tenha informado uma senha de proteção para a sua private key, será necessário digitá-la para que a autenticação seja concluída.

Existem vários modos de realizar a cópia da chave pública para o computador remoto. Vamos agora, portanto, conferir alguns deles.

É importante ressaltar, antes de mais nada, que neste momento você ainda deve ser capaz de se autenticar na máquina remota através de um usuário e uma senha.

Como copiar a chave através da ferramenta ssh-copy-id

Este é o método mais fácil e rápido. Esta ferramenta adiciona rapidamente sua chave pública no servidor Linux remoto desejado. Ela a adicionará, mais precisamente, ao arquivo authorized_keys (veja acima).

Para copiar sua chave pública para o computador remoto, utilize um comando semelhante ao abaixo, lembrando sempre de substituir “usuário” e “IP_Do_Servidor” pelas informações corretas:

ssh-copy-id usuário@IP_Do_Servidor

Obs: neste ponto, será necessário informar os dados de acesso baseados em senha com os quais você se loga atualmente no servidor.

Assim, e lembrando mais uma vez que este procedimento deve ser realizado no computador onde o par de chaves foi gerado (local), você obterá informações semelhantes às abaixo no seu terminal:

Geração de chaves SSH

Se você observar a imagem acima, perceberá que foi solicitada a digitação da senha de proteção da chave privada (id_rsa). Se você não informou uma senha durante a geração, naturalmente esta não será aqui solicitada.

Antes do processo de cópia ser concluído, é possível que você receba algumas mensagens diferentes no terminal. Tais mensagens podem ser iniciadas pela frase “The authenticity of host…”, por exemplo.

Isto acontece somente na primeira vez em que você realiza o procedimento. Basta, na sequência, confirmar com yes/sim.

Pronto! Você acaba de copiar sua chave pública para o servidor. A partir deste momento, já é possível utilizar o par para a devida autenticação.

Como copiar a chave através do próprio SSH

Nesse sentido, você também pode copiar sua chave pública para um servidor remoto através do próprio SSH.

Isto é muito útil caso o utilitário ssh-copy-id não esteja disponível, por qualquer motivo que seja. Neste caso, use um comando como o abaixo:

cat ~/.ssh/id_rsa.pub | ssh usuário@IP_Do_Servidor  "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Obs: lembre-se apenas de substituir “usuário” e “IP_Do_Servidor” pelos seus dados reais de acesso.

Ou seja, através do comando acima, você pode “extrair” e enviar diretamente para o servidor remoto, através do SSH, o conteúdo do arquivo id_rsa.pub (a chave pública).

Nesse sentido, perceba também que o comando faz com que o conteúdo extraído (a public key) seja adicionado ao arquivo ~/.ssh/authorized_keys.

Mais uma vez, é importante lembrar que para a concretização do procedimento, você deverá digitar a senha da sua chave privada (caso tenha informado alguma).

Como copiar a chave SSH manualmente

Se você prefere um método mais simples (caso o sh-copy-id não esteja disponível), é também possível realizar a cópia da chave pública para a máquina remota de forma totalmente manual.

Claro, a definição de “simplicidade” pode variar de pessoa para pessoa, e justamente devido a este motivo achei interessante introduzir mais de um método de cópia.

Basicamente, neste caso, você deve abrir o arquivo ~/.ssh/id_rsa.pub no seu computador local, copiar seu conteúdo e colá-lo no final do arquivo ~/.ssh/authorized_keys do servidor remoto.

Agora, passo a passo: abra o arquivo ~/.ssh/id_rsa.pub na máquina local (onde o par de chaves foi gerado). Copie todo o seu conteúdo (para a área de transferência ou para um outro arquivo de texto).

Acesse o servidor remoto, através do método de sua preferência. Neste caso, você pode até mesmo utilizar um cliente FTP ou algum gerenciador de arquivos fornecido pela sua empresa de hospedagem.

Acesse o diretório ~/.ssh. Nele, você encontrará o arquivo authorized_keys. Abra-o ou baixe-o para sua máquina local. O importante aqui é editá-lo e adicionar o conteúdo do arquivo id_rsa.pub em seu final.

Caso tenha baixado o arquivo, edite-o localmente, portanto. Adicione nele o conteúdo do arquivo id_rsa.pub, salve a alteração e envie-o novamente para o servidor, substituindo qualquer um que aí exista.

Pronto, você acaba de “instalar” sua chave pública manualmente no servidor remoto.

Como acessar o servidor através de chaves SSH

Se você chegou até aqui, já possui um par de chaves SSH gerado. Uma chave privada (a id_rsa) e uma chave pública (a id_rsa.pub).

Dessa forma, a autenticação via chaves SSH no servidor Linux remoto é agora perfeitamente possível. Você nem precisará digitar uma senha para concluir a conexão, embora eu recomende mais uma vez que você projeta sua chave privada mediante o uso de uma senha (veja acima).

Basicamente, neste ponto, para realizar a conexão basta que você digite o seguinte no terminal:

ssh usuário@IP_Do_Servidor

Por exemplo:

ssh [email protected]

Apenas lembre-se de utilizar os dados corretos, ou seja, informe seu usuário e o IP do servidor.

Como fazer backup das chaves pública e privada

Basicamente, você deve manter seu par de chaves à salvo de imprevistos. O arquivo mais importante, na verdade, é o id_rsa. Ele representa sua chave privada.

E, caso você perca sua chave privada, por exemplo, pelo menos a princípio será impedido de se logar nos seus servidores.

De qualquer forma, é bem fácil fazer um backup na íntegra, contendo o par de chaves SSH. Basta copiar o conteúdo do diretório ~/.ssh para um local seguro.

Copie tudo: id_rsa, id_rsa.pub, etc. Faça cópias para um HD ou SSD externo, para um pen drive, para sua conta em algum serviço de armazenamento seguro em nuvem, etc.

Simples, não?

Como proteger as chaves SSH

Em primeiro lugar, após logar-se no servidor remoto, digite o comando abaixo:

sudo chmod -R 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys

Basicamente, o comando acima ajusta as permissões do diretório ~/.ssh, de forma tal a permitir que apenas o proprietário (no caso, você) tenha acesso a ele.

Além disso, as permissões do arquivo authorized_keys também são ajustadas, de forma mais restritiva.

Você deve, além disso, proteger sua chave privada mediante uma passphrase (veja acima). Finalmente, recomendo que você desabilite logins baseados em senha no servidor.

Nesse sentido, você encontra estes procedimentos em detalhes, além de mais alguns outros, em vários guias aqui no TecLinux. Confira acima os links para os mesmos.

Conclusão

E assim chegamos ao final de mais um guia no TeclInux. Desta vez você pôde entender um pouco mais a respeito das chaves SSH, incluindo o porquê deste método de autenticação SSH ser mais apropriado.

Agora, você sabe como gerar um par de chaves SSH e também como utilizar este método para se logar em seus servidores Linux.

Passo a passo, você pôde conferir tudo o que é necessário, além de ter agora em mãos um material capaz de servir como base para consultas futuras.

Não hesite em deixar um comentário, expondo sua opinião e/ou dúvidas. Até a próxima!

Compartilhe este conteúdo:

<a href="https://teclinux.com/author/marcos-zy/" target="_self">Marcos A.T. Silva</a>

Marcos A.T. Silva

Apaixonado por tecnologia desde tenra idade, trabalha com TI há mais de 20 anos. Tem no rock and roll (em suas mais variadas vertentes) uma válvula de escape, e adora escrever guias e tutoriais, além de ser um grande entusiasta do Linux e do software livre.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Pin It on Pinterest

Share This

Compartilhe

Compartilhe este post com seus amigos!