Como configurar chaves SSH no Ubuntu 22.04
imprimir- Ubuntu, SSH
- 0
SSH, ou shell seguro, é um protocolo criptografado usado para administrar e se comunicar com servidores. Ao trabalhar com um servidor Ubuntu, é provável que você passe a maior parte do seu tempo em uma sessão de terminal conectada ao seu servidor através de SSH.
Neste guia, vamos nos concentrar na configuração de chaves SSH para uma instalação do Ubuntu 22.04. As chaves SSH fornecem uma maneira segura de fazer login no servidor e são recomendadas para todos os usuários.
Criando o par de chaves
A primeira etapa é criar um par de chaves na máquina cliente (geralmente seu computador):
ssh-keygen |
Por padrão, as versões recentes do criarão um par de chaves RSA de 3072 bits, que é seguro o suficiente para a maioria dos casos de uso (você pode, opcionalmente, passar o sinalizador para criar uma chave maior de 4096 bits).ssh-keygen
-b 4096
Depois de inserir o comando, você verá a seguinte saída:
Output
|
Pressione Enter para salvar o par de chaves no subdiretório do diretório base ou especifique um caminho alternativo. .ssh/
Se você tiver gerado anteriormente um par de chaves SSH, poderá ver o seguinte prompt:
Output
|
Se você optar por substituir a chave no disco, não poderá mais se autenticar usando a chave anterior. Tenha muito cuidado ao selecionar sim, pois este é um processo destrutivo que não pode ser revertido.
Em seguida, você verá o seguinte prompt:
Output
|
Aqui você opcionalmente pode inserir uma senha segura, o que é altamente recomendado. Uma senha adiciona uma camada adicional de segurança para impedir que usuários não autorizados façam login.
Em seguida, você verá a saída semelhante à seguinte:
Output
|
Agora você tem uma chave pública e privada que pode ser usada para autenticar. A próxima etapa é colocar a chave pública no servidor para que você possa usar a autenticação baseada em chave SSH para fazer logon.
Copiando a chave pública para o seu servidor Ubuntu
A maneira mais rápida de copiar sua chave pública para o host Ubuntu é usar um utilitário chamado . Devido à sua simplicidade, este método é altamente recomendado, se disponível. Se você não tiver disponível para você em sua máquina cliente, você pode usar um dos dois métodos alternativos fornecidos nesta seção (copiar via SSH baseado em senha ou copiar manualmente a chave).ssh-copy-id
ssh-copy-id
Copiando a chave pública usando ssh-copy-id
A ferramenta está incluída por padrão em muitos sistemas operacionais, então você pode tê-la disponível em seu sistema local. Para que esse método funcione, você já deve ter acesso SSH baseado em senha ao seu servidor. ssh-copy-id
Para usar o utilitário, especifique o host remoto ao qual deseja se conectar e a conta de usuário à qual você tem acesso SSH baseado em senha. Esta é a conta para a qual sua chave SSH pública será copiada.
A sintaxe é:
ssh-copy-id username@remote_host |
Poderá ver a seguinte mensagem:
Output
|
Isso significa que o 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 para continuar.ENTER
Em seguida, o utilitário verificará sua conta local em busca da chave que criamos anteriormente. Quando ele encontrar a chave, ele solicitará a senha da conta do usuário remoto: id_rsa.pub
Output
|
Digite a senha (sua digitação não será exibida, por motivos de segurança) e pressione . O utilitário se conectará à conta no host remoto usando a senha fornecida. Em seguida, ele copiará o conteúdo da sua chave para um arquivo no diretório pessoal da conta remota chamado. ENTER
~/.ssh/id_rsa.pub
~/.ssh
authorized_keys
Você deve ver a seguinte saída:
Output
|
Neste ponto, sua chave foi carregada para a conta remota.
Copiando a chave pública usando SSH
Se você não tiver disponível, mas tiver acesso SSH baseado em senha a uma conta em seu servidor, poderá carregar suas chaves usando um método SSH convencional. ssh-copy-id
Podemos fazer isso usando o comando para ler o conteúdo da chave SSH pública em nosso computador local e canalizando isso através de uma conexão SSH com o servidor remoto. cat
Por outro lado, podemos ter certeza de que o diretório existe e tem as permissões corretas na conta que estamos usando. ~/.ssh
Podemos então produzir o conteúdo que canalizamos para um arquivo chamado dentro deste diretório. Usaremos o símbolo de redirecionamento para anexar o conteúdo em vez de substituí-lo. Isso nos permitirá adicionar chaves sem destruir chaves adicionadas anteriormente. authorized_keys
>>
O comando completo tem a seguinte aparência:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys" |
Poderá ver a seguinte mensagem:
Output
|
Isso significa que o computador local não reconhece o host remoto. Isso acontecerá na primeira vez que você se conectar a um novo host. Digite e pressione para continuar. yes
ENTER
Depois, você deve ser solicitado a inserir a senha da conta de usuário remoto:
Output
|
Depois de inserir sua senha, o conteúdo de sua chave será copiado para o final do arquivo da conta do usuário remoto. Continue se isso for bem-sucedido. id_rsa.pub
authorized_keys
Copiando a chave pública manualmente
Se você não tiver acesso SSH baseado em senha ao seu servidor disponível, você terá que concluir o processo acima manualmente.
Acrescentaremos manualmente o conteúdo do seu arquivo ao arquivo em sua máquina remota. id_rsa.pub
~/.ssh/authorized_keys
Para exibir o conteúdo da chave, digite isso no computador local: id_rsa.pub
cat ~/.ssh/id_rsa.pub |
Você verá o conteúdo da chave, que deve ter a seguinte aparência:
Output
|
Acesse seu host remoto usando qualquer método que você tenha disponível.
Depois de ter acesso à sua conta no servidor remoto, verifique se o diretório existe. Este comando criará o diretório, se necessário, ou não fará nada se ele já existir: ~/.ssh
mkdir -p ~/.ssh |
Agora, você pode criar ou modificar o arquivo dentro desse diretório. Você pode adicionar o conteúdo do seu arquivo ao final do arquivo, criando-o se necessário, usando este comando: authorized_keys
id_rsa.pub
authorized_keys
echo public_key_string >> ~/.ssh/authorized_keys |
No comando acima, substitua o pela saída do comando que você executou no sistema local. Deve começar com .public_key_string
cat ~/.ssh/id_rsa.pub
ssh-rsa AAAA...
Finalmente, garantiremos que o diretório e o arquivo tenham as permissões apropriadas definidas: ~/.ssh
authorized_keys
chmod -R go= ~/.ssh |
Isso remove recursivamente todas as permissões "grupo" e "outros" 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 pertença ao usuário e não ao root: ~/.ssh
chown -R sammy:sammy ~/.ssh |
Neste tutorial, nosso usuário é chamado sammy, mas você deve substituir o nome de usuário apropriado no comando acima.
Agora podemos tentar autenticação sem senha com nosso servidor Ubuntu.
Autenticando para o seu servidor Ubuntu usando chaves SSH
Se você concluiu com êxito um dos procedimentos acima, você deve ser capaz de fazer logon no host remoto sem fornecer a senha da conta remota.
O processo básico é o mesmo:
ssh username@remote_host |
Se esta for sua primeira vez se conectando a este host (se você usou o último método acima), você pode ver algo assim:
Output
|
Isso significa que o computador local não reconhece o host remoto. Digite "yes" e pressione para continuar. ENTER
Se você não forneceu uma senha para sua chave privada, você será conectado imediatamente. Se você forneceu uma senha para a chave privada quando criou a chave, você será solicitado a inseri-la agora (observe que os pressionamentos de tecla não serão exibidos na sessão do terminal por segurança). Após a autenticação, uma nova sessão shell deve ser aberta para você com a conta configurada no servidor Ubuntu.
Se a autenticação baseada em chave foi bem-sucedida, continue para aprender a proteger ainda mais seu sistema desabilitando a autenticação de senha.
Desabilitando a autenticação de senha no servidor
Se você conseguiu fazer login em sua conta usando SSH sem uma senha, você configurou com êxito 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 nesta seção, verifique se você tem a autenticação baseada em chave SSH configurada para a conta raiz neste servidor ou, de preferência, se você tem a autenticação baseada em chave SSH configurada para uma conta não raiz neste servidor com privilégios. Esta etapa bloqueará logins baseados em senha, portanto, garantir que você ainda será capaz de obter acesso administrativo é crucial. sudo
Depois de confirmar que sua conta remota tem privilégios administrativos, faça login no servidor remoto com chaves SSH, seja como root ou com uma conta com privilégios. Em seguida, abra o arquivo de configuração do daemon SSH: sudo
sudo nano /etc/ssh/sshd_config |
Dentro do arquivo, procure uma diretiva chamada . Esta linha pode ser comentada com um no início da linha. Remova o comentário da linha removendo o , e defina o valor como . Isso desabilitará sua capacidade de fazer login via SSH usando senhas de conta: PasswordAuthentication
no
. . .
|
Salve e feche o arquivo quando terminar pressionando , em seguida, para confirmar o salvamento do arquivo e, finalmente, para sair nano. Para realmente ativar essas alterações, precisamos reiniciar o serviço: CTRL+X
Y
ENTER
sshd
sudo systemctl restart ssh |
Por precaução, abra uma nova janela de terminal e teste se o serviço SSH está funcionando corretamente antes de fechar sua sessão atual:
ssh username@remote_host |
Depois de verificar se o serviço SSH está funcionando corretamente, você pode fechar com segurança todas as sessões atuais do servidor.
O daemon SSH no seu servidor Ubuntu agora só responde à autenticação baseada em chave SSH. Os logins baseados em senha foram desativados.
Conclusão
Agora você deve ter a autenticação baseada em chave SSH configurada em seu servidor, permitindo que você entre sem fornecer uma senha de conta.