Como configurar chaves SSH no Ubuntu 16.04

Introdução

SSH, também conhecido como Secure Shell, é um protocolo criptografado geralmente usado para administrar e se comunicar com servidores. Ao trabalhar com um servidor Ubuntu, o foco principal deste tutorial é a configuração de chaves SSH para o Ubuntu 16.04. As chaves SSH são recomendadas para todos os usuários e fornecem uma maneira fácil e segura de fazer login no seu servidor.

Etapa 1 — Crie o par de chaves RSA

O primeiro passo na configuração das chaves SSH é criar um par de chaves na máquina cliente (geralmente em um computador):


$ ssh-keygen

Para começar, o ssh-keygen criará um par de chaves RSA de 2048 bits, o que será seguro o suficiente para a maioria dos casos de uso.

Como alternativa, você pode opcionalmente passar o sinalizador -b 4096 para criar uma chave maior de 4096 bits

Após digitar o comando, você deverá ver o seguinte prompt:


Output

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/ no seu diretório inicial ou em um caminho alternativo personalizado.
O seguinte prompt deve aparecer:


Output

Enter passphrase ( leave empty for no passphrase):

Opcionalmente, você pode inserir uma senha segura, o que é altamente recomendado. Uma senha adiciona uma camada adicional de segurança para impedir o login de usuários não autorizados. Para saber mais sobre segurança, consulte nosso tutorial sobre como configurar a autenticação baseada em chave SSH em um servidor Linux.

Você deverá 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:
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ê deve ter uma chave pública e uma privada que podem ser usadas para autenticação. O próximo passo é colocar a chave pública no seu servidor para que você possa usar a autenticação baseada em chave SSH para fazer login.


Etapa 2 — Copiando a chave pública para o servidor Ubuntu


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


Copiando a chave pública usando ssh-copy-id


A ferramenta ssh-copy-id está incluída por padrão em muitos sistemas operacionais; você pode tê-la disponível no seu sistema local. Para que funcione, você precisará de um acesso SSH baseado em senha ao seu servidor.
Para usar o utilitário, você precisa especificar o host remoto ao qual deseja se conectar e simplesmente adicionar a conta de usuário à qual você tem acesso SSH por senha. Esta será a conta para a qual sua chave SSH pública será copiada.


A sintaxe é:


$ ssh-copy-id username@remote_host

Você poderá ver a seguinte mensagem:


Output

The authenticity of host '111.111.11.111 (111.111.11.111)' 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 reconheceu o host remoto. Isso provavelmente acontece na primeira vez que você se conecta a um novo host. Digite "yes" e pressione ENTER para continuar.


Em seguida, o utilitário verificará sua conta local em busca da chave id_rsa.pub que criamos anteriormente. Ao encontrar a chave, ele 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@111.111.11.111's password:

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


Depois disso, você deverá ver a seguinte saída:


Output

Number of key(s) added: 1

Logging into the machine, with: "ssh 'username@111.111.11.111'"
and check to make sure that only the key you wanted was added.

Neste ponto do processo, sua chave id_rsa.pub foi carregada para a conta remota.

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 no seu servidor, poderá carregar suas chaves usando um método SSH convencional.

Podemos fazer isso usando o comando cat para ler o conteúdo da chave SSH pública em nosso computador local e canalizá-lo por meio de uma conexão SSH para o servidor remoto. Por outro lado, podemos garantir que o diretório ~/.ssh exista na conta que estamos usando e, em seguida, enviar o conteúdo canalizado para um arquivo chamado authorized_keys dentro desse 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:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

Você poderá ver a seguinte mensagem:

Output

The authenticity of host '111.111.11.111 (111.111.11.111)' 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ê será solicitado a digitar a senha da conta de usuário remoto:

Output

username@111.111.11.111'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 do usuário remoto. Continue para a Etapa 3 se a operação tiver sido bem-sucedida.

Copiando a chave pública manualmente

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

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

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


cat ~/.ssh/id_rsa.pub

Você verá o conteúdo da chave, que deve ser parecido com isto:


Output

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle
7Q+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 usando o método que você tiver disponível.

Depois de acessar sua conta no servidor remoto, certifique-se de que o diretório ~/.ssh exista. O comando criará o diretório, se necessário, ou não fará nada se ele já existir:

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:


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

echo public_key_string >> ~/.ssh/authorized_keys

Agora podemos tentar acessar nosso servidor Ubuntu com uma autenticação sem senha.

Etapa 3 — Autentique-se no servidor Ubuntu usando chaves SSH

Se você tiver concluído um dos procedimentos acima, você conseguirá efetuar login no host remoto sem a senha da conta remota.

O processo básico é o mesmo da outra vez que o usamos:

$ ssh username@remote_host

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

Output

The authenticity of host '111.111.11.111 (111.111.11.111)' 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

Se isso ocorrer, significa que o seu computador local não reconhece o host remoto. Digite "sim" e pressione ENTER para continuar.


Se você não forneceu uma senha para sua chave privada, seu login será efetuado imediatamente. Se você forneceu uma senha para a chave privada ao criá-la, será solicitado a digitá-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 deverá ser aberta para você com a conta configurada no servidor Ubuntu.


Se a autenticação baseada em chave for bem-sucedida, continue aprendendo como proteger ainda mais seu sistema desabilitando a autenticação por senha.


Etapa 4 — Desabilite a autenticação de senha no seu servidor

Se você conseguiu acessar sua conta usando SSH sem uma senha, configurou com sucesso a autenticação baseada em chave SSH para sua conta. No entanto, seu 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 ter a autenticação baseada em chave SSH configurada para a conta root neste servidor ou, de preferência, de ter a autenticação baseada em chave SSH configurada para uma conta não root neste servidor com privilégios sudo. Esta etapa bloqueará logins baseados em senha, portanto, garantir que você ainda consiga obter acesso administrativo é crucial.


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

sudo nano /etc/ssh/sshd_config

Dentro do arquivo, procure por uma diretiva chamada PasswordAuthentication. Ela pode estar comentada. Descomente a linha e defina o valor como "no". Isso desabilitará o 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 o salvamento e, por fim, ENTER para sair do nano. Para implementar essas alterações, precisamos reiniciar o serviço sshd:


$ 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:

$ 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 no seu servidor Ubuntu agora responde apenas a chaves SSH. A autenticação baseada em senha foi desativada com sucesso.


Conclusão


Com o tutorial concluído, você deverá ter a autenticação baseada em chave SSH configurada no seu servidor, permitindo que você faça login sem fornecer uma senha de conta.