SSH e transferência de arquivos
Esta aula aborda o SSH, o protocolo padrão para acesso remoto seguro, e as ferramentas scp e rsync para transferência de arquivos. Também apresenta uma visão geral sobre chaves SSH e boas práticas de segurança e uso.
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_confige definindoPasswordAuthentication 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
- OpenSSH Manual
- ssh(1) - Linux manual page
- scp(1) - Linux manual page
- rsync(1) - Linux manual page
- How to Set Up SSH Keys on Ubuntu 20.04 - Linuxize
- SSH Essentials - DigitalOcean
- SSH Command - SSH Academy
Exercícios
- Explique a diferença entre autenticação por senha e por chave SSH. Quais são as vantagens de usar chaves?
backup do seu computador local para o servidor remoto servidor, no diretório /home/usuario/, usando scp? Escreva o comando.
scp -r backup usuario@servidor:/home/usuario/
site/ com o diretório remoto site/ no servidor, comprimindo e mostrando o progresso, usando SSH?
rsync -avz -e ssh site/ usuario@servidor:site/
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.