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.
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).
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.
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.
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.
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.
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.
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.