O primeiro passo para configurar as chaves SSH é criar um par de chaves na máquina cliente (geralmente em um computador):
$ ssh-keygenPara começar, o ssh-keygen criará um par de chaves RSA de 2048 bits, o que será suficiente para a maioria dos casos de uso.
Como alternativa, você pode opcionalmente passar o parâmetro -b 4096 para criar uma chave maior de 4096 bits.
Após inserir o comando, você deverá ver a seguinte mensagem:
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/ do seu diretório pessoal ou em um caminho alternativo personalizado. A seguinte mensagem deverá aparecer:
Output Enter passphrase ( leave empty for no passphrase):Opcionalmente, você pode inserir uma senha segura, o que é altamente recomendável. Uma senha adiciona uma camada extra de segurança para impedir que usuários não autorizados façam login. Para saber mais sobre segurança, consulte nosso tutorial sobre Como configurar a autenticação baseada em chave SSH em um servidor Linux.
Em seguida, 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 chave privada que pode usar 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, caso esteja disponível. Se você não tiver o ssh-copy-id disponível em sua máquina cliente, poderá usar um dos dois métodos alternativos fornecidos nesta seção (copiar via SSH com 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 em seu sistema local. Para que funcione, você precisará ter acesso SSH ao seu servidor, protegido por senha. 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ê possui acesso SSH com senha. Esta será a conta para a qual sua chave SSH pública será copiada.
A sintaxe é:
$ ssh-copy-id username@remote_hostVocê 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)? yesIsso 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 "sim" e pressione ENTER para continuar.
Em seguida, o utilitário irá procurar na sua conta local a chave id_rsa.pub que criamos anteriormente. Quando 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 o que você digitou não será exibido 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 chamado authorized_keys no diretório ~/.ssh da conta remota.
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.Nesta etapa do processo, sua chave id_rsa.pub já foi carregada na conta remota.
Se você não tiver o ssh-copy-id disponível, mas tiver acesso SSH baseado em senha a uma conta em seu servidor, poderá enviar 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 redirecioná-lo através de uma conexão SSH para o servidor remoto. Do outro lado, podemos garantir que o diretório `~/.ssh` exista na conta que estamos usando e, em seguida, gravar o conteúdo que redirecionamos em 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 é o seguinte:
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)? yesIsso 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 "sim" e pressione ENTER para continuar.
Em seguida, você deverá ser solicitado a inserir a senha da conta de usuário remota:
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. Se a operação for bem-sucedida, prossiga para a Etapa 3.
Caso você não tenha acesso SSH ao seu servidor protegido por senha, será necessário concluir o processo acima manualmente.
Adicionaremos 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 o seguinte no seu computador:
cat ~/.ssh/id_rsa.pubVocê verá o conteúdo da chave, que deverá ser algo 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@testAcesse seu host remoto usando o método que você tiver disponível.
Após obter acesso à sua conta no servidor remoto, verifique se o diretório ~/.ssh existe. O comando criará o diretório, se necessário, ou não fará nada se ele já existir.
mkdir -p ~/.sshAgora, 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 `public_key_string` pela saída do comando `cat ~/.ssh/id_rsa.pub` que você executou em seu sistema local. Ela deve começar com `ssh-rsa AAAA....`
echo public_key_string >> ~/.ssh/authorized_keysAgora podemos tentar acessar nosso servidor Ubuntu com autenticação sem senha.
Se você concluiu um dos procedimentos acima, deverá conseguir acessar o host remoto sem a senha da conta remota.
O processo básico é o mesmo da outra vez que o utilizamos:
$ ssh username@remote_hostSe esta for a sua primeira vez conectando-se a este host (caso tenha utilizado o último método acima), você poderá ver algo como isto:
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)? yesSe isso ocorrer, significa que 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, o login será feito imediatamente. Se você forneceu uma senha para a chave privada ao criá-la, será solicitado que a insira 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 do shell será aberta para você com a conta configurada no servidor Ubuntu.
Se a autenticação baseada em chave for bem-sucedida, continue para aprender como proteger ainda mais seu sistema desativando a autenticação por senha.
Se você conseguiu acessar sua conta usando SSH sem senha, configurou com sucesso a autenticação baseada em chave SSH. No entanto, seu mecanismo de autenticação baseado em senha ainda está ativo, o que significa que seu servidor ainda está vulnerável a ataques de força bruta.
Antes de concluir os passos desta seção, certifique-se de que a autenticação baseada em chave SSH esteja configurada para a conta root neste servidor ou, preferencialmente, que esteja configurada para uma conta não root com privilégios sudo. Esta etapa bloqueará os logins baseados em senha, portanto, garantir que você ainda poderá obter acesso administrativo é crucial.
Após confirmar que sua conta remota possui privilégios administrativos, faça login no servidor remoto com chaves SSH, seja 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_configDentro do arquivo, procure por uma diretiva chamada PasswordAuthentication. Ela pode estar comentada. Remova o comentário da 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 ao terminar pressionando CTRL + X, depois Y para confirmar o salvamento e, finalmente, ENTER para sair do nano. Para implementar essas alterações, precisamos reiniciar o serviço sshd:
$ sudo systemctl restart sshPor 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_hostApós verificar o serviço SSH, você pode fechar com segurança todas as sessões de servidor em andamento.
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ê agora deve ter a autenticação baseada em chave SSH configurada em seu servidor, o que permitirá que você faça login sem fornecer uma senha de conta.