O SSH (Secure Shell) é um protocolo de rede que permite acessar e gerenciar máquinas remotas de forma segura, criptografando toda a comunicação entre cliente e servidor. Ele é fundamental para administradores de sistemas, desenvolvedores e qualquer pessoa que precise operar servidores Linux remotamente. Nesta aula, exploraremos o uso básico do SSH, as ferramentas de transferência de arquivos scp e rsync, a configuração de chaves SSH para autenticação sem senha e boas práticas para manter suas conexões seguras.

Dominar essas ferramentas é essencial para automatizar tarefas, implantar aplicações e gerenciar infraestruturas de forma eficiente. Vamos começar com o comando ssh e depois avançar para as ferramentas de transferência.

ssh

O comando ssh é a porta de entrada para o acesso remoto. Ele estabelece uma conexão criptografada com um servidor, permitindo que você execute comandos como se estivesse na máquina remota. A sintaxe básica é:

ssh usuario@host

Onde usuario é o nome de usuário na máquina remota e host é o endereço IP ou nome de domínio. Se o usuário for o mesmo local, pode-se omitir usuario@. Ao conectar, o cliente solicita a senha (ou usa chave, como veremos adiante).

Além do acesso interativo, o SSH pode executar comandos diretamente, o que é útil para scripts:

ssh usuario@host "comando"

Por exemplo, para listar arquivos no diretório home do servidor:

ssh usuario@servidor "ls -la"

É possível também redirecionar a saída localmente, combinar com pipes e até mesmo usar o SSH para encaminhamento de portas (tunelamento). O SSH usa a porta 22 por padrão, mas pode ser alterado com a opção -p.

Um recurso poderoso é o encaminhamento de portas, que permite acessar serviços remotos como se estivessem locais. Por exemplo, para acessar um banco de dados remoto via porta local:

ssh -L 5432:localhost:5432 usuario@servidor

Isso cria um túnel seguro, redirecionando a porta 5432 local para a porta 5432 do servidor remoto.

Outra opção útil é -v (verbose) para depuração e -i para especificar um arquivo de chave privada.

scp e rsync

Para transferir arquivos de forma segura entre máquinas, o scp (secure copy) é uma ferramenta simples e direta. Ele usa o SSH como base, portanto a conexão é criptografada. A sintaxe é semelhante ao cp:

scp origem destino

Exemplos:

scp arquivo.txt usuario@servidor:/caminho/destino/

Para copiar um arquivo do servidor para o local:

scp usuario@servidor:/caminho/arquivo.txt .

Para copiar diretórios recursivamente, use a flag -r:

scp -r pasta/ usuario@servidor:/destino/

O scp é ideal para transferências pontuais, mas para sincronizações maiores ou contínuas, o rsync é mais eficiente. O rsync compara arquivos de origem e destino e transfere apenas as diferenças, economizando banda e tempo. Ele também pode ser usado sobre SSH:

rsync -avz -e ssh origem/ usuario@servidor:/destino/

As opções comuns são:

  • -a: modo arquivo (recursivo, preserva permissões, timestamps, links simbólicos).
  • -v: verbose, mostra o progresso.
  • -z: comprime os dados durante a transferência.
  • -e ssh: especifica o uso do SSH como transporte.

O rsync é perfeito para backups e sincronização de diretórios, e pode ser executado periodicamente via cron.

Chaves SSH (visão geral)

Usar senhas para autenticação é vulnerável a ataques de força bruta e pode ser inconveniente. As chaves SSH oferecem uma alternativa mais segura e prática. O conceito é baseado em criptografia assimétrica: você gera um par de chaves (pública e privada). A chave pública é colocada no servidor, e a privada permanece com você. Ao conectar, o servidor verifica se a chave privada corresponde à pública, sem transmitir a senha.

Para gerar as chaves, use o comando:

ssh-keygen -t ed25519

Ou, para compatibilidade com sistemas mais antigos, rsa:

ssh-keygen -t rsa -b 4096

O comando criará os arquivos ~/.ssh/id_ed25519 (privada) e ~/.ssh/id_ed25519.pub (pública). Você pode definir uma passphrase para proteger a chave privada, adicionando uma camada extra de segurança.

Para instalar a chave pública no servidor, use o comando ssh-copy-id:

ssh-copy-id usuario@servidor

Isso adiciona a chave pública ao arquivo ~/.ssh/authorized_keys do servidor. Depois disso, você poderá conectar sem digitar a senha (a menos que a chave privada tenha passphrase).

É importante nunca compartilhar sua chave privada. Ela é como uma senha que dá acesso a todos os servidores que contêm sua chave pública.

Boas práticas

Para manter suas conexões SSH seguras e eficientes, siga estas recomendações:

  • Desative login por senha no servidor, se possível, editando /etc/ssh/sshd_config e definindo PasswordAuthentication no. Isso força o uso de chaves.
  • Use uma passphrase na chave privada e considere usar um agente SSH (ssh-agent) para não digitá-la toda vez.
  • Altere a porta padrão (22) para uma porta não padrão, reduzindo ataques automatizados (embora não seja uma segurança real, ajuda a diminuir ruído).
  • Mantenha o software atualizado (OpenSSH) para corrigir vulnerabilidades.
  • Use conexões multiplexadas (opção ControlMaster) para reutilizar conexões e acelerar sessões repetidas.
  • Restrinja o acesso por IP usando firewall (iptables, ufw) ou configuração do SSH.
  • Monitore os logs de autenticação (/var/log/auth.log) para detectar tentativas suspeitas.

Para transferências de arquivos, prefira rsync para grandes volumes e scp para arquivos únicos. Sempre verifique os destinos e use caminhos absolutos para evitar erros.

Observações finais

O SSH é uma ferramenta versátil que vai muito além do acesso remoto. Com o conhecimento de chaves e transferência de arquivos, você pode automatizar deploys, backups e gerenciamento de servidores. Pratique os comandos em um ambiente de teste para internalizar as opções e flags.

Referências

Exercícios

  1. Explique a diferença entre autenticação por senha e por chave SSH. Quais são as vantagens de usar chaves?

✓ Resposta: A autenticação por senha envia a senha pela rede (embora criptografada) e é vulnerável a ataques de força bruta. Já a autenticação por chave usa criptografia assimétrica: o servidor envia um desafio que só pode ser respondido com a chave privada. Vantagens: maior segurança (não há senha para ser descoberta), possibilidade de automação (sem intervenção manual), e revogação fácil (basta remover a chave pública do authorized_keys).
  • Como você copiaria um diretório chamado backup do seu computador local para o servidor remoto servidor, no diretório /home/usuario/, usando scp? Escreva o comando.
  • ✓ Resposta:
    scp -r backup usuario@servidor:/home/usuario/
  • Qual comando rsync você usaria para sincronizar o diretório local site/ com o diretório remoto site/ no servidor, comprimindo e mostrando o progresso, usando SSH?
  • ✓ Resposta:
    rsync -avz -e ssh site/ usuario@servidor:site/
  • Descreva o processo para configurar autenticação por chave SSH em um servidor, desde a geração das chaves até a conexão sem senha.
  • ✓ Resposta: 1) Gere o par de chaves com ssh-keygen -t ed25519. 2) Copie a chave pública para o servidor com ssh-copy-id usuario@servidor. 3) Teste a conexão com ssh usuario@servidor; se configurado corretamente, não pedirá senha. Alternativamente, você pode manualmente adicionar o conteúdo de ~/.ssh/id_ed25519.pub ao arquivo ~/.ssh/authorized_keys no servidor.
  • Cite três boas práticas de segurança para SSH e explique por que cada uma é importante.
  • ✓ Resposta: 1) Desativar login por senha: elimina o risco de ataques de força bruta. 2) Usar chaves com passphrase: protege a chave privada se ela for roubada. 3) Manter o software atualizado: corrige vulnerabilidades conhecidas. Outras práticas: usar porta não padrão, restringir por IP, e monitorar logs.