SSH: Como usar chaves e acessar servidores com segurança

Publicado em 25/09/2023

O acesso SSH com par de chaves muda o patamar de segurança de um servidor, e serve tanto para transferir arquivo quanto para administrar servidor Linux.

O que é SSH e a importância das chaves

SSH, abreviação para Secure Shell, é um túnel seguro dentro de uma internet cheia de ameaças.

É um protocolo de comunicação segura em rede não segura, e é ferramenta diária de administradores de servidores. A autenticação no SSH pode ser feita por senha, mas o que interessa aqui é o par de chaves: uma pública e uma privada. Senha se decifra ou se adivinha; a chave acrescenta uma camada a mais.

Bem gerenciado, esse método praticamente elimina o risco de ataque de força bruta, porque a chave privada, que fica em segredo com o usuário, funciona como uma senha digital.

Par de chaves: pública e privada

As chaves criptográficas são o centro do SSH. Mas o que são essas chaves?

Imagine uma fechadura e uma chave: a chave pública é a fechadura, aberta a todos, e a chave privada é a chave que abre, guardada só por você. A chave pública, como o nome indica, pode ser compartilhada com qualquer pessoa ou servidor, e serve para criptografar informação. A chave privada tem que permanecer secreta e é o que descriptografa a informação criptografada pela chave pública.

O ponto do sistema é que ter a sua chave pública não serve de nada sem a chave privada correspondente. Quando você tenta se conectar a um servidor via SSH, o servidor criptografa uma mensagem com sua chave pública. Se você consegue descriptografá-la com sua chave privada, isso prova sua identidade e o servidor libera o acesso. Tudo isso acontece em milissegundos e autentica você sem senha nenhuma.

Descomplicando

Imagine que você tem uma caixa valiosa que deseja proteger. Esta caixa tem uma fechadura única, e só pode ser aberta com uma chave específica. Em vez de criar uma chave física, você decide fazer algo diferente: cria um molde que qualquer pessoa pode usar para criar uma chave temporária.

Este molde é a sua chave pública. Você pode compartilhá-lo com qualquer pessoa e até mesmo colocá-lo em uma praça pública. As pessoas podem usar este molde para fazer uma chave que consegue fechar a caixa, mas curiosamente, essa chave não pode abri-la novamente, apenas o molde original pode.

Sua chave original, aquela que pode abrir e fechar a caixa, é a chave privada. Você guarda esta chave em um local seguro, onde mais ninguém além de você pode encontrá-la ou usá-la.

Agora, imagine que um amigo quer lhe enviar uma mensagem secreta. Ele pega a mensagem, coloca dentro da caixa e usa o molde da chave pública que você deixou na praça para trancar a caixa. Ele lhe envia a caixa, e você, com sua chave privada, é o único que pode abrir e ler a mensagem.

Este processo garante duas coisas: primeiro, que apenas você pode ler a mensagem, já que apenas sua chave privada pode abrir a caixa. E segundo, que a mensagem realmente veio daquele amigo, pois ele usou o molde de chave que você compartilhou publicamente.

Assim como na parábola, no mundo digital, a chave pública (molde) é usada para criptografar (fechar) informações, e a chave privada é usada para descriptografar (abrir) essas informações. O SSH com par de chaves garante, de forma confiável, a identidade e a segurança das informações trocadas entre máquinas e usuários.

Tipos de chaves criptográficas

Nem toda chave é igual. Vários algoritmos de criptografia geram par de chaves SSH, e cada um tem sua vantagem:

  • RSA: um dos mais antigos e mais usados, o RSA se apoia na dificuldade de fatorar números primos grandes. As chaves RSA costumam ter de 2048 a 4096 bits, e 2048 é o tamanho mais comum.
  • DSA (DSS): baseado em algoritmos de assinatura digital e padrão em muitos sistemas. Só que ele é limitado a chaves de 1024 bits, hoje consideradas menos seguras.
  • ECDSA: usa criptografia de curva elíptica, que oferece segurança parecida com chave mais curta, o que economiza banda.
  • ED25519: implementação recente, também de curva elíptica, com segurança alta e chave de tamanho fixo de 256 bits.

A escolha depende da finalidade e da necessidade de segurança. Quem está começando pode ir de RSA ou ED25519, que são amplamente aceitos e sólidos.

Como gerar seu par de chaves

Linux (linha de comando):

  1. Abra o terminal.
  2. Digite ssh-keygen -t rsa -b 4096 para criar uma chave RSA de 4096 bits.
  3. Você será solicitado a fornecer um local para salvar as chaves. Pressione Enter para aceitar o local padrão (~/.ssh/id_rsa para chave privada e ~/.ssh/id_rsa.pub para chave pública).
  4. Uma senha pode ser definida para a chave privada como uma camada adicional de segurança. Se optar por não configurar, pressione Enter.

Windows 10 ou superior (linha de comando com OpenSSH):

  1. Instale o cliente OpenSSH através das “Funcionalidades Opcionais” nas Configurações do Windows.
  2. Abra o PowerShell ou CMD.
  3. Siga as mesmas etapas acima, começando pelo ssh-keygen.

Windows (via PuTTY):

  1. Baixe e instale PuTTY e PuTTYgen.
  2. Abra o PuTTYgen e clique em “Generate”.
  3. Mova o mouse aleatoriamente na área da janela para gerar entropia.
  4. Salve a chave pública e privada em locais seguros.

Criar e gerenciar chave SSH é o que mantém o seu acesso seguro. Chave criptográfica bem manejada barra o acesso não autorizado.

Transferência de arquivos com segurança via SSH

O SSH não serve só para acesso remoto e execução de comando. O SCP (Secure Copy Protocol) transfere arquivo com a mesma segurança. Outra opção comum é o SFTP (Secure File Transfer Protocol).

Utilizando SCP no Linux:

Para transferir um arquivo do seu computador local para um servidor remoto:

scp /caminho/local/do/arquivo username@servidor:/caminho/remoto/

Para transferir um arquivo de um servidor remoto para seu computador local:

scp username@servidor:/caminho/remoto/do/arquivo /caminho/local/

Utilizando SCP no Windows (com OpenSSH)

As mesmas instruções do Linux podem ser seguidas no Windows se o cliente OpenSSH estiver instalado.

SFTP para transferências:

Diferente do SCP, que é baseado em comandos, o SFTP abre uma sessão em que você interage, parecido com o FTP tradicional, mas com a segurança do SSH. Depois de conectar com sftp username@servidor, você usa comandos como ls, cd, get (baixar) e put (enviar) para gerenciar e transferir arquivos.

Manter o dado seguro durante a transferência importa tanto quanto ter um acesso seguro, e o SSH dá conta das duas coisas.

Gerenciando e administrando servidores via SSH

O SSH é a ferramenta de quem administra servidor de forma remota. O acesso é seguro e serve para muita coisa. Algumas das tarefas comuns:

Execução remota de comandos:

Você não precisa iniciar uma sessão SSH completa para executar um comando. Por exemplo:

ssh username@servidor 'comando'

Este comando executa o ‘comando’ especificado diretamente no servidor remoto.

Tunelamento e redirecionamento de portas:

O SSH permite criar túneis seguros, que são úteis para encaminhar tráfego de portas específicas. Por exemplo, você pode redirecionar o tráfego de uma porta local para uma porta no servidor remoto.

Monitoramento de servidores:

Com o SSH, você monitora recursos, verifica logs e instala software. Comandos como top ou htop mostram o consumo de recursos em tempo real, e o tail serve para acompanhar log.

Segurança aprimorada com chaves:

Além de usar chaves em vez de senhas, você pode configurar o servidor SSH para recusar conexão por senha, o que força o uso de autenticação por chave.

Configurações personalizadas:

O arquivo de configuração principal do SSH, geralmente em /etc/ssh/sshd_config, aceita bastante personalização. Dá para mudar a porta padrão, limitar quais usuários podem acessar e muito mais.

O SSH, portanto, vai além de executar comando: ele dá conta da administração e do gerenciamento do servidor inteiro.

Boas práticas de segurança ao usar SSH

O SSH é uma ferramenta forte, mas o nível real de segurança depende de como você usa. Algumas medidas para proteger o servidor:

1. Desative o login como root: Evite permitir o acesso direto ao usuário root via SSH. Em vez disso, entre como um usuário normal e eleve seus privilégios com sudo quando necessário.

2. Use autenticação baseada em chave: Como dito acima, par de chaves é mais seguro que senha. Desative a autenticação de senha no arquivo sshd_config com a linha PasswordAuthentication no.

3. Mantenha seu software atualizado: Certifique-se de que seu servidor SSH esteja sempre atualizado para garantir que as vulnerabilidades conhecidas estejam corrigidas.

4. Altere a porta padrão: Mudar a porta padrão do SSH (22) para outra pode ajudar a reduzir ataques automatizados.

5. Implemente um firewall: Use ferramentas como ufw ou firewalld para restringir o acesso ao seu servidor.

6. Monitore os logs de acesso: Regularmente, verifique os logs de acesso em /var/log/auth.log ou similar para qualquer atividade suspeita.

7. Utilize ferramentas de proteção: Softwares como Fail2Ban podem monitorar tentativas de login e bloquear IPs após tentativas de login malsucedidas.

8. Backup regularmente: Sempre tenha backups atualizados de suas configurações e dados. Em caso de qualquer problema, você terá uma maneira de restaurar seu servidor.

Segurança não se resolve de uma vez. Acompanhe as boas práticas e revise a configuração de tempos em tempos, para manter servidores e dados protegidos.