O SSH, ou shell seguro, é um protocolo criptografado usado para administrar e se comunicar com servidores. Ao trabalhar com um servidor Ubuntu, existem boas chances de você gastar a maior parte do seu tempo em uma sessão de terminal conectada ao seu servidor através do SSH.
Neste guia, vamos focar na configuração de chaves SSH para uma instalação básica do Ubuntu 16.04. As chaves SSH fornecem uma maneira fácil e segura de fazer login no seu servidor e são recomendadas para todos os usuários.
O primeiro passo é criar uma par de chaves na máquina do cliente (geralmente seu computador):
- ssh-keygen
Por padrão, o ssh-keygen
criará um par de chaves RSA de 2048-bit, que é seguro o suficiente para a maioria dos casos (você pode opcionalmente adicionar a flag -b 4096
para criar uma chave maior de 4096-bit).
Após digitar o comando, você deve ver o seguinte resultado:
OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):
Pressione ENTER
para salvar o par de chaves no sub-diretório .ssh/
no seu diretório home, ou especifique um caminho alternativo.
Se você tivesse gerado anteriormente um par de chaves SSH, pode ser que veja o seguinte prompt:
Output/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?
Se escolher substituir a chave no disco, você não poderá autenticar-se usando a chave anterior. Seja cuidadoso ao selecionar o sim, uma vez que este é um processo destrutivo que não pode ser revertido.
Então, você deve ver o seguinte prompt:
OutputEnter passphrase (empty for no passphrase):
Aqui você pode digitar uma frase secreta de forma opcional, o que é altamente recomendado. Uma frase secreta adiciona uma camada adicional de segurança para evitar que os usuários não autorizados façam login. Para aprender mais sobre segurança, consulte nosso tutorial sobre Como configurar a autenticação baseada em chaves SSH em um servidor Linux.
Você deve ver o seguinte resultado:
OutputYour 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ê tem uma chave pública e privada que pode usar para se autenticar. O próximo passo é colocar a chave pública no seu servidor para que você possa usar a autenticação baseada em chaves SSH para fazer login.
A maneira mais rápida de copiar sua chave pública para o host do Ubuntu é usar um utilitário chamado ssh-copy-id
. Devido a sua simplicidade, este método é altamente recomendado se estiver disponível. Se não tiver o ssh-copy-id
disponível na sua máquina do cliente, você pode usar um dos dois métodos alternativos fornecidos nesta seção (copiar através do SSH baseado em senha, ou copiar manualmente a chave).
ssh-copy-id
A ferramenta ssh-copy-id
é incluída por padrão em muitos sistemas operacionais, então você pode tê-la disponível no seu sistema local. Para que este método funcione, você já deve ter acesso via SSH baseado em senha ao seu servidor.
Para usar o utilitário, você precisa especificar apenas o host remoto ao qual gostaria de se conectar e a conta do usuário que tem acesso SSH via senha. Esta é a conta na qual sua chave SSH pública será copiada.
A sintaxe é:
- ssh-copy-id username@remote_host
Pode ser que você veja a seguinte mensagem:
OutputThe 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
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.
Em seguida, o utilitário irá analisar sua conta local em busca da chave id_rsa.pub
que criamos mais cedo. Quando ele encontrar a chave, irá 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@203.0.113.1's password:
Digite a senha (sua digitação não será exibida para fins de segurança) e pressione ENTER
. O utilitário se conectará à conta no host remoto usando a senha que você forneceu. Então, ele copiará o conteúdo da sua chave ~/.ssh/id_rsa.pub
em um arquivo no diretório da conta remota home ~/.ssh
chamado authorized_keys
.
Você deve ver o seguinte resultado:
OutputNumber of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@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 enviada para a conta remota. Você pode continuar para o Passo 3.
Se não tiver o ssh-copy-id
disponível, mas tiver acesso SSH baseado em senha a uma conta do seu servidor, você pode fazer o upload das 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 no nosso computador local e passando isso através de uma conexão SSH ao servidor remoto.
Do outro lado, podemos garantir que o diretório ~/.ssh
exista e que tenha as permissões corretas na conta que estamos usando.
Então, podemos entregar o conteúdo que foi passado em um arquivo chamado authorized_keys
dentro deste diretório. Vamos usar o símbolo de redirecionamento >>
para adicionar o conteúdo ao invés de substituí-lo. Isso permitirá que adicionemos chaves sem destruir chaves previamente adicionadas.
O comando completo se parece com este:
- cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
Pode ser que você veja a seguinte mensagem:
OutputThe 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
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 disso, você deve ser solicitado a digitar a senha da conta de usuário remoto:
Outputusername@203.0.113.1's password:
Após digitar 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 o Passo 3 se isso foi bem-sucedido.
Se não tiver acesso SSH baseado em senha ao seu servidor disponível, você terá que completar o processo acima manualmente.
Vamos adicionar 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 isso no seu computador local:
- cat ~/.ssh/id_rsa.pub
Você verá o conteúdo da chave, que deve ser parecido com este:
Outputssh-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 usando algum método que você tenha disponível.
Assim que tiver acesso à sua conta no servidor remoto, você deve garantir que o diretório ~/.ssh
exista. Este 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 for necessário, usando este comando:
- echo public_key_string >> ~/.ssh/authorized_keys
No comando acima, substitua o public_key_string
pelo resultado do comando cat ~/.ssh/id_rsa.pub
que você executou no seu sistema local. Ela deve começar com ssh-rsa AAAA...
.
Por fim, vamos garantir que o diretório ~/.ssh
e o arquivo authorized_keys
tenha as permissões apropriadas configuradas:
- chmod -R go= ~/.ssh
Isso remove recursivamente todas as permissões “group” e “other” para o diretório ~/.ssh/
.
Se você estiver usando a conta root
para configurar chaves para uma conta de usuário, também é importante 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 substituí-lo pelo nome de usuário apropriado no comando acima.
Agora, podemos tentar uma autenticação sem senha com nosso servidor Ubuntu.
Se tiver completado um dos procedimentos acima, você deve conseguir fazer login no host remoto sem a senha da conta remota.
O processo básico é o mesmo:
- ssh username@remote_host
Se essa é a primeira vez que você se conecta a este host (caso tenha usado o último método acima), pode ser que veja algo como isso:
OutputThe 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
Isso significa que seu computador local não reconhece o host remoto. Digite “yes” e então pressione ENTER
para continuar.
Se não forneceu uma frase secreta para sua chave privada, você será logado imediatamente. Caso tenha fornecido uma frase secreta para a chave privada quando criou a chave, você será solicitado a digitá-la agora (note que sua digitação não será exibida na sessão do terminal como medida de segurança). Após a 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 chaves foi bem-sucedida, continue para aprender a proteger ainda mais o seu sistema, desativando a autenticação por senha.
Se conseguiu logar na sua conta usando o SSH sem uma senha, você configurou com sucesso a autenticação baseada em chaves SSH na sua conta. Entretanto, seu mecanismo de autenticação baseado em senha ainda está ativo, o que significa que seu servidor ainda está exposto a ataques por força bruta.
Antes de completar os passos nesta seção, certifique-se de que você tenha uma autenticação baseada em chaves SSH configurada para a conta raiz neste servidor, ou, de preferência, que tenha uma autenticação baseada em senhas SSH configurada para uma conta não raiz neste servidor com privilégios sudo
. Este passo irá bloquear os logins baseados em senha, então garantir que você ainda consiga obter acesso administrativo é crucial.
Assim que você tiver confirmado que sua conta remota tem privilégios administrativos, logue no seu servidor remoto com chaves SSH, como raiz ou com uma conta com privilégios sudo
. Então, abra o arquivo de configuração do daemon SSH:
- sudo nano /etc/ssh/sshd_config
Dentro do arquivo, procure por uma diretriz chamada PasswordAuthentication
. Isso pode ser transformado em comentário. Descomente a linha e configure o valor em “no”. Isso irá desativar a sua capacidade de fazer login através do SSH usando senhas de conta:
...
PasswordAuthentication no
...
Salve e feche o arquivo quando terminar pressionando CTRL+X
, então Y
para confirmar o salvamento do arquivo e, por fim, ENTER
para sair do nano. Para realmente implementar essas alterações, 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 username@remote_host
Assim que tiver verificado seu serviço SSH, você pode fechar todas as sessões atuais do servidor com segurança.
O daemon SSH no seu servidor Ubuntu agora responde apenas às chaves SSH. A autenticação baseada em senha foi desativada com sucesso.
Agora, você deve ter uma autenticação baseada em chaves SSH configurada no seu servidor, permitindo que você faça login sem fornecer uma senha da conta.
Se você quiser aprender mais sobre como trabalhar com o SSH, veja nosso Guia dos fundamentos SSH.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!