Pesquisa de site

Como configurar a autenticação baseada em chave SSH em um servidor FreeBSD


Introdução

SSH, ou shell seguro, é um protocolo de rede que fornece uma maneira segura e criptografada de se comunicar e administrar seus servidores. Como o SSH é a forma mais comum de trabalhar com um servidor FreeBSD, você deve se familiarizar com as diferentes formas de autenticação e login em seu servidor. Embora existam várias maneiras de fazer login em um servidor FreeBSD, este tutorial se concentrará na configuração e no uso de chaves SSH para autenticação.

Nota: A partir de 1º de julho de 2022, a DigitalOcean não suporta mais a criação de novos Droplets do FreeBSD por meio do Painel de Controle ou API. No entanto, você ainda pode ativar o FreeBSD Droplets usando uma imagem personalizada. Aprenda como importar uma imagem personalizada para a DigitalOcean seguindo nossa documentação do produto.

Como funcionam as chaves SSH

Um servidor SSH pode autenticar clientes usando vários métodos. Os métodos mais comuns incluem senha e autenticação de chave SSH. Embora as senhas forneçam uma barreira contra o acesso não autorizado, o uso de chaves SSH geralmente é muito mais seguro.

O problema com as senhas é que elas geralmente são criadas manualmente, sem tamanho ou complexidade de conteúdo suficientes. Portanto, eles podem ser suscetíveis a serem comprometidos por ataques de força bruta. As chaves SSH fornecem uma alternativa segura e confiável.

Os pares de chaves SSH podem ser usados em vez de senhas para autenticação, e cada par de chaves consiste em uma chave privada e uma chave pública correspondente.

A chave privada age de forma semelhante a uma senha e é mantida no computador cliente. Seu conteúdo deve ser mantido em segredo - se uma pessoa não autorizada obtiver acesso à sua chave privada, ela deve ser considerada comprometida e substituída imediatamente. A chave privada geralmente tem pelo menos 2.048 bits de comprimento e pode ser opcionalmente criptografada com uma frase secreta (basicamente uma senha necessária para usar a chave privada) para limitar seu uso caso uma pessoa não autorizada obtenha acesso à chave.

A chave pública associada pode ser compartilhada livremente sem quaisquer consequências negativas. Ele pode ser usado para criptografar mensagens que somente a chave privada pode descriptografar - essa é a base de como funciona a autenticação de chave SSH.

Para habilitar o uso de uma chave privada para autenticação, a chave pública correspondente é instalada na conta de um usuário em um servidor remoto. A chave pública deve ser adicionada a um arquivo especial dentro do diretório inicial do usuário remoto chamado .ssh/authorized_keys. Quando o cliente tenta se conectar ao servidor remoto, o servidor pode verificar se o cliente possui uma chave privada que corresponda a uma das chaves autorizadas - se a chave privada for verificada para corresponder a uma chave pública autorizada, o cliente será autenticado e um sessão de shell é iniciada.

Como criar um par de chaves SSH

A primeira etapa na configuração da autenticação de chave SSH é gerar um par de chaves SSH em seu computador local, o computador no qual você fará login.

Para gerar um par de chaves SSH, você pode usar o utilitário ssh-keygen. Por padrão, ele criará um par de chaves RSA de 2.048 bits, o que é adequado para a maioria dos casos.

No terminal do seu computador local, gere um par de chaves com este comando:

ssh-keygen

Você verá uma saída como a seguinte:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

No prompt, você pode aceitar o local da chave padrão ou inserir um caminho diferente. Se você aceitar o padrão, as chaves serão armazenadas no diretório .ssh, dentro do diretório home do seu usuário. A chave privada será chamada id_rsa e a chave pública será chamada id_rsa.pub.

Se você está apenas começando com as chaves SSH, é melhor ficar com o local padrão. Isso permitirá que seu cliente SSH encontre automaticamente suas chaves SSH ao tentar autenticar. Se você quiser escolher um caminho não padrão, digite-o agora, caso contrário, deixe o prompt em branco e pressione RETURN para aceitar o padrão.

Se você gerou anteriormente um par de chaves SSH, poderá ver um prompt como este:

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

Se você optar por substituir a chave existente, ela será excluída e você não poderá mais usá-la para autenticar. Ou seja, você não deve sobrescrevê-lo, a menos que tenha certeza de que não precisa dele para autenticação em nenhum de seus servidores.

Neste ponto, você deve ver um prompt para uma frase secreta:

Created directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again: 

Essa senha opcional é usada para criptografar a chave privada. Se você definir uma frase secreta aqui, ela será necessária sempre que você usar a chave privada para autenticação, ou seja, a autenticação exigirá a chave privada e sua frase secreta, que pode fornecer segurança adicional se a chave privada está de alguma forma comprometido. Se você deixar a senha em branco, poderá usar a chave privada para fazer login em seus servidores sem uma senha—ou seja, a autenticação ocorrerá com base apenas em sua chave privada, portanto, certifique-se de manter sua chave segura.

Depois disso, você verá a seguinte saída, que informará onde a chave pública e privada estão sendo criadas, entre outros detalhes:

Your identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
76:e2:bc:19:18:b3:35:59:f4:54:b9:d3:bc:d0:56:a1 username@localcomputer
The key's randomart image is:
+--[ RSA 2048]----+
|          . ...o.|
|         . o  o .|
|          . .E.+.|
|         o   .ooo|
|      o S .   o..|
|       X +     . |
|      o +        |
|         +       |
|        o        |
+-----------------+

Agora que você tem um par de chaves SSH públicas e privadas, instale a chave pública nos servidores nos quais deseja usar a autenticação de chave SSH para efetuar login.

Como copiar uma chave pública para o seu servidor

Se você já possui um servidor FreeBSD e não adicionou uma chave SSH a ele durante sua criação (conforme descrito na seção anterior), existem algumas outras maneiras de adicionar sua chave pública e usar sua chave privada para autenticar em seu servidor . Cada método termina com o mesmo resultado, a capacidade de autenticar para um determinado usuário em um servidor usando seu par de chaves SSH. Observe que você pode repetir qualquer um desses métodos para instalar várias chaves SSH (permitindo acesso ao proprietário de qualquer uma das chaves privadas correspondentes).

Descreveremos alguns métodos diferentes, começando pelo mais simples. Basta usar o método para o qual você tem as ferramentas e com o qual se sente mais confortável.

Copiando sua chave pública com SSH-Copy-ID

Se você tiver o utilitário ssh-copy-id em seu computador local, poderá usá-lo para adicionar facilmente uma chave SSH pública a um servidor remoto ao qual você tenha acesso SSH baseado em senha. O utilitário ssh-copy-id é frequentemente, mas nem sempre, incluído no pacote OpenSSH (o mesmo que fornece ssh e ssh-keygen).

Para verificar se você tem a ferramenta em seu computador local, tente executar ssh-copy-id na linha de comando. Se não estiver disponível, você receberá um erro comando não encontrado. Se você não tiver o utilitário disponível, tente instalá-lo ou use um dos outros métodos descritos nas subseções a seguir.

Para usar ssh-copy-id, você deve especificar o endereço IP ou nome de domínio do host remoto e o usuário ao qual adicionar a chave SSH pública. Pode ser executado assim (substitua as partes destacadas pelas informações apropriadas):

ssh-copy-id username@remote_host

Você pode ver uma mensagem como esta:

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)? yes

Isso significa que seu computador local não reconhece o servidor remoto porque nunca tentou usar o SSH para se conectar a ele antes. Responda ao prompt com yes e pressione RETURN para continuar.

O utilitário irá varrer sua conta de usuário local para a chave pública que você criou anteriormente, id_rsa.pub. Quando for encontrado, você será solicitado a fornecer a senha do usuário no servidor remoto:

/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.222.11.222's password:

Digite a senha e pressione RETURN. O utilitário se conectará à conta do usuário no host remoto e instalará sua chave pública, id_rsa.pub. A chave é instalada copiando o conteúdo de sua chave pública em um arquivo chamado .ssh/authorized_keys no diretório inicial do usuário remoto.

Se a cópia for bem-sucedida, você verá uma saída como esta:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@111.222.11.222'"
and check to make sure that only the key(s) you wanted were added.

Como sua chave pública está instalada no arquivo authorized_keys do usuário remoto, a chave privada correspondente (id_rsa em seu computador local) será aceita como autenticação para o usuário no servidor remoto .

Continue na seção Autenticar no servidor usando chaves SSH para fazer login no servidor usando chaves SSH.

Copiando sua chave pública com SSH

Se você não tiver ssh-copy-id em seu computador local, mas tiver acesso SSH baseado em senha ao seu servidor, poderá instalar sua chave pública usando o cliente SSH.

Este método funciona gerando a chave SSH pública em seu computador local e enviando através de SSH para o servidor de remoção. No servidor remoto, executamos alguns comandos para criar o diretório ~/.ssh, caso ainda não exista, e adicionamos a chave pública em um arquivo chamado authorized_keys no diretório. Usaremos o redirecionamento >> para anexar a chave ao arquivo authorized_keys, se já existir, caso alguma chave SSH pública já esteja instalada na conta do usuário remoto ( para que não sejam substituídos e removidos como chaves autorizadas).

Supondo que sua chave pública tenha o nome padrão, id_rsa.pub, aqui está o comando para instalar a chave SSH pública (substitua o usuário remoto e o host):

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

Você pode ver uma mensagem como esta:

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)? yes

Isso significa que seu computador local não reconhece o servidor remoto porque nunca tentou usar o SSH para se conectar a ele antes. Responda ao prompt com yes e pressione RETURN para continuar.

Agora você será solicitado a fornecer a senha do usuário remoto:

username@111.222.11.222's password:

Digite a senha e pressione RETURN. Se o comando foi executado com sucesso, você não receberá nenhum feedback. O conteúdo de id_rsa.pub, sua chave pública, será anexado ao final do arquivo authorized_keys do usuário remoto.

Continue na seção Autenticar no servidor usando chaves SSH para fazer login no servidor usando chaves SSH.

Copiando sua chave pública manualmente

Se preferir instalar a chave pública manualmente, você pode usar SSH ou acesso de console para fazer isso. Você será solicitado a efetuar login no servidor remoto como o usuário no qual deseja instalar a chave pública.

O processo básico é pegar sua chave SSH pública, o conteúdo de id_rsa.pub, e adicioná-lo ao arquivo .ssh/authorized_keys no diretório inicial do usuário no host remoto.

Primeiro, faça login no servidor remoto. Você pode fazer isso usando o seguinte comando para se conectar via SSH:

ssh username@remote_host

Você pode ver uma mensagem como esta:

The authenticity of host '111.222.11.222 (111.222.11.222)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ab:e6:6d:12:fe.
Are you sure you want to continue connecting (yes/no)? yes

Isso significa que seu computador local não reconhece o servidor remoto porque nunca tentou usar o SSH para se conectar a ele antes. Responda ao prompt com yes e pressione RETURN para continuar.

Agora você será solicitado a fornecer a senha do usuário remoto:

Password for username@111.222.11.222:

Agora você deve criar um diretório .ssh no diretório inicial do usuário remoto, caso ainda não exista. Este comando fará exatamente isso:

mkdir -p ~/.ssh

Em seu computador local, insira este comando no terminal para imprimir sua chave SSH pública:

cat ~/.ssh/id_rsa.pub

Copie a saída para a área de transferência e abra o arquivo authorized_keys no editor de texto de sua escolha. Usaremos ee aqui:

ee ~/.ssh/authorized_keys

Cole sua chave pública no arquivo authorized_keys, salve e saia. Se você estiver usando ee, salve e saia pressionando ESC seguido de a e então a novamente.

Sua chave SSH pública agora está instalada no servidor remoto. Continue na próxima seção para fazer login em seu servidor usando chaves SSH.

Autentique-se no seu servidor usando chaves SSH

Se você instalou com sucesso uma chave SSH pública em seu servidor FreeBSD usando um dos métodos acima, você poderá fazer login no servidor usando autenticação de chave. Ou seja, você não precisará mais da senha do usuário remoto para efetuar login.

Tente fazer login no servidor remoto usando SSH:

ssh username@remote_host

Se você não criou seu par de chaves SSH com uma senha, você será conectado imediatamente. Se você criou seu par de chaves com uma senha, será solicitado a inseri-la.

Se você estiver logado em seu servidor, isso significa que a chave SSH foi instalada com sucesso.

Observe que a autenticação baseada em senha e chave agora está habilitada para este usuário. Se você quiser desabilitar a autenticação de senha para seu servidor, tornando-o mais seguro exigindo chaves SSH para fazer login, leia a próxima seção.

Desativando a autenticação de senha em seu 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 em 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, preferencialmente, que você tenha a autenticação baseada em chave SSH configurada para uma conta neste servidor com acesso sudo. Esta etapa bloqueará logins baseados em senha, portanto, é essencial garantir que você ainda consiga obter acesso administrativo.

Quando as condições acima forem verdadeiras, faça login no servidor remoto com chaves SSH, como root ou com uma conta com privilégios sudo. Abra o arquivo de configuração do daemon SSH:

sudo ee /etc/ssh/sshd_config

No arquivo, encontre uma diretiva chamada ChallengeResponseAuthentication. Pode ser comentado. Descomente a linha, removendo o caractere # e, em seguida, defina o valor como \no. Deve ficar assim quando terminar:

ChallengeResponseAuthentication no

Salve e feche o arquivo. Se você estiver usando ee, salve e saia pressionando ESC seguido de a e então a novamente.

Para que as alterações entrem em vigor, você deve reiniciar o serviço sshd. Para reiniciar o daemon SSH no FreeBSD, use este comando:

sudo service sshd restart

Agora, qualquer acesso SSH ao servidor deve usar a autenticação de chave SSH, pois a autenticação por senha foi desativada.

Conclusão

Agora você deve ter a autenticação baseada em chave SSH funcionando em seu servidor FreeBSD, permitindo que você faça login sem fornecer uma senha de usuário. A partir daqui, você pode querer ler mais sobre como proteger seu servidor FreeBSD. Se você quiser saber mais sobre como trabalhar com SSH, dê uma olhada em nosso guia de fundamentos do SSH.