We hope you find this tutorial helpful. In addition to guides like this one, we provide simple cloud infrastructure for developers. Learn more →

Como Configurar Chaves SSH no Ubuntu 18.04

PostedMay 10, 2018 5.4k views Getting Started Linux Basics Security System Tools Ubuntu 18.04

Introdução

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

Neste guia, vamos focar na configuração de chaves SSH para uma instalação genérica do Ubuntu 18.04. Chaves SSH fornecem uma forma fácil e segura de efetuar login em seu servidor e é recomendado 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 o seu computador):

  • ssh-keygen

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

Após digitar o comando, você deve ver a seguinte saída:

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

Pressione enter para salvar o par de chaves dentro do subdiretório .ssh/ em sua pasta home, ou especifique um caminho alternativo.

Se você tiver gerado um par de chaves SSH anteriormente, você pode ver o seguinte prompt:

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

Se você escolher sobrepor a chave no disco, você não poderá autenticar usando a chave anterior mais. Seja bastante cuidadoso quando selecionar yes, uma vez que esse é um processo destrutivo e que não pode ser revertido.

Você deve então ver o seguinte prompt:

Output
Enter passphrase (empty for no passphrase):

Aqui você pode opcionalmente entrar com uma frase de segurança, o que é altamente recomendado. A frase de segurança adiciona uma camada a mais de segurança para prevenir usuários não autorizados de efetuar login. Para aprender mais sobre segurança, consulte nosso tutorial sobre Como Configurar Autenticação SSH Baseada em Chaves em um Servidor Linux.

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

Output
Your identification has been saved in /sua_pasta_home/.ssh/id_rsa. Your public key has been saved in /sua_pasta_home/.ssh/id_rsa.pub. The key fingerprint is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+

Agora você tem uma chave pública e uma privda que você poderá utilizar para autenticar. O próximo passo é colocar a chave pública no seu servidor para que você possa usar a autenticação SSH baseada em chaves para eftuar login.

Passo 2 — Copiar a Chave Pública para o Servidor Ubuntu

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

Copiando a Chave Pública Usando o ssh-copy-id

A ferramenta ssh-copy-id está incluída por padrão em vários sistemas operacionais, assim você deve tê-lo disponível em seu sistema local. Para este método funcionar, você já deve ter o acesso SSH baseado em senha para o seu servidor.

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

A sintaxe é:

  • ssh-copy-id nome_de_usuário@host_remoto

Você pode ver a segunte 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. Isto ocorrerá na primeira vez que você se conectar a um novo host. Digite "yes" e pressione ENTERpara continuar.

Após isso, o utilitário irá escanear sua conta local pela chave id_rsa.pub que criamos mais cedo. Quando ele encontra a chave, ele irá solicitar a você a senha da conta de usuário remota:

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 nome_de_usuário@203.0.113.1's password:

Digite a senha (sua digitação não será mostrada por questões de segurança) e pressione ENTER. O utilitário irá conectar-se à conta no host remoto utilizando a senha que você forneceu. Então, ele irá copiar o conteúdo da sua chave ~/.ssh/id_rsa.pub dentro de um arquivo no diretório ~/.ssh do home da conta remota chamado authorized_keys.

Você deve ver a seguinte saída:

Output
Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'nome_de_usuário@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 carregada para a conta no host remoto. Você pode continuar com o Passo 3.

Copiando a Chave Pública Usando SSH

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

Podemos fazer isso usando o comando cat para ler o conteúdo da chave pública em seu computador local e fazer um redirecionamento disso através de uma conexão SSH ao servidor remoto.

Do outro lado, podemos nos certificar que o diretório ~/.ssh existe e tem as permissões corretas sob a conta que estamos utilizando.

Podemos então, dar saída do conteúdo que redirecionamos para dentro de um arquivo chamado authorized_keys dentro desse diretório. Utilizaremos o símbolo de redirecionamento >> para acrescentar o conteúdo em vez de sobrescrevê-lo. Isso nos permitirá adicionar chaves sem a destruição das chaves previamente adicionadas.

O comando completo se parece com isso:

  • cat ~/.ssh/id_rsa.pub | ssh nome_de_usuário@host_remoto "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

Isto significa que seu computador local não reconhece o host remoto. Isto ocorrerá na primeira vez que você se conectar a um novo host. Digite "yes" e pressione ENTERpara continuar.

Depois, você deverá ser solicitado a entrar com a senha da conta do usuário remoto:

Output
nome_de_usuário@203.0.113.1's password:

Depois de entrar com 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 remota. Continue com o Passo 3 se isso foi bem sucedido.

Copiando a Chave Pública Manualmente

Se você não tem acesso SSH ao servidor baseado em senha disponível, você terá que completar o processo acima manualmente.

Vamos acrescentar maualmente o conteúdo do seu arquivo id_rsa.pub ao arquivo ~/.ssh/authorized_keys na sua máquina remota.

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

  • cat ~/.ssh/id_rsa.pub

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

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

Acesse seu host remoto utilizando qualquer método que você tiver disponível.

Uma vez que você tiver acesso à sua conta no servidor remoto, você deve certificar-se de que o diretório ~/.ssh existe. Esse comando irá criar o diretório se necessário, ou não fazer nada se ele já existir:

  • mkdir -p ~/.ssh

Agora você pode criar ou modificar o arquivo authorized_keys dentro desse 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, utilizando este comando:

  • echo string_da_chave_pública >> ~/.ssh/authorized_keys

No comando acima, substitua a stringdachavepública com a saída do comando `cat ~/.ssh/idrsa.pubque você executou em seu sistema local. Ele deve iniciar comssh-rsa AAAA...`.

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

  • chmod -R go= ~/.ssh

Isto remove recursivamente todas as permissões “group” e “other” para o diretório ~/.ssh/.

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

  • chown -R sammy:sammy ~/.ssh

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

Podemos agora tentar a autenticação sem senha com nosso servidor Ubuntu.

Passo 3 — Autenticar no Servidor Ubuntu Usando Chaves SSH

Se você completou com sucesso um dos procedimentos acima, você deve ser capaz de logar no host remoto sem a senha da conta remota.

O processo básico é o mesmo:

  • ssh nome_de_usuário@host_remoto

Se esta é a primeira vez que você se conecta 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<~>

Isto significa que seu computador local não reconhece o host remoto. Digite "yes" e pressione ENTERpara continuar.

Se você não forneceu a frase secreta para sua chave privada, você estará logado imediatamente. Se você forneceu uma frase secreta para a chave privada quando você a criou, você será solicitado a entrar com ela agora (observe que sua digitação não será mostrada no terminal devido a questões de segurança). Depois da autenticação, uma nova sessão de shell deve abrir para você com a conta configurada no servidor Ubuntu.

Se a autenticação baseada em chave ocorreu com sucesso, continue para aprender como proteger ainda mais o seu sistema desativando a autenticação por senha.

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

Se você foi capaz de se logar em sua conta usando SSH sem uma senha, você configurou com sucesso a autenticação SSH baseada em chaves para sua conta. Contudo, seu mecanismo de autenticação baseado em senha ainda está ativo, significando que seu servidor ainda está exposto a ataques de força bruta.

Antes de completar os passos nessa sessão, certifique-se de que, ou você tem a autenticação SSH baseada em chaves para a conta root nesse servidor, ou preferencialmente, que você tem a autenticação SSH baseada em chaves para uma conta que não seja root e que tenha privilégios sudo. Esse passo irá bloquear logins baseados em senha, portanto, garantir que você ainda será capaz de obter acesso administrativo é crucial.

Uma vez que você confirmou que sua conta remota possui privilégios administrativos, efetue login no seu servidor com as chaves SSH, ou como root ou com uma conta com privilégios sudo. Depois, abra o arquivo de configuração do serviço SSH:

  • sudo nano /etc/ssh/sshd_config

Dentro do arquivo, pesquise por uma diretiva chamada PasswordAuthentication. Isso deve estar comentado. Descomente a linha e defina o valor para "no". Isso irá desativar sua capacidade de logar via SSH usando senhas de conta:

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

Salve e feche o arquivo quando tiver terminado pressionando CTRL + X, e depois Y para confirmar o salvamento do arquivo, e finalmente ENTER para sair do nano. Para implementar essas mudanças de fato, precisamos reiniciar o serviço sshd:

  • sudo systemctl restart ssh

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

ssh nome_de_usuário@host_remoto

Uma vez que tiver verificado o seu serviço SSH, você pode fechar com segurança todas as sessões atuais do servidor.

O serviço ou daemon SSH no seu servidor Ubuntu agora somente responde a chaves SSH. A autenticação baseada em senha foi desativada com sucesso.

Conclusão

Agora você deve ter a autenticação SSH baseada em chaves configurada em seu servidor, permitindo efetuar login sem fornecer uma senha de conta.

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

0 Comments

Creative Commons License