SSH e transferência de arquivos
Esta aula aborda o uso do SSH para acesso remoto seguro e as ferramentas scp e rsync para transferência de arquivos, incluindo uma visão geral sobre chaves SSH e boas práticas de segurança. O conteúdo é prático, com exemplos de comandos e exercícios para fixação.
O SSH (Secure Shell) é o protocolo padrão para acesso remoto seguro a servidores e sistemas Unix-like. Ele criptografa toda a comunicação entre o cliente e o servidor, protegendo contra interceptação e ataques. Nesta aula, vamos explorar os comandos essenciais para conectar-se a máquinas remotas e transferir arquivos com segurança, além de entender a autenticação por chaves e as boas práticas de uso.
Dominar SSH e as ferramentas associadas é fundamental para administradores de sistemas, desenvolvedores e qualquer pessoa que precise gerenciar servidores remotos. Você aprenderá a conectar, copiar arquivos e automatizar tarefas de forma eficiente e segura.
ssh
O comando ssh permite estabelecer uma sessão interativa em um servidor remoto. A sintaxe básica é ssh usuário@host. Por padrão, ele usa a porta 22, mas pode ser alterada com a opção -p. Durante a primeira conexão, o cliente exibe a impressão digital do servidor para verificação, e você pode aceitá-la para armazená-la no arquivo ~/.ssh/known_hosts.
Além de abrir um shell remoto, o SSH pode executar comandos diretamente sem entrar na sessão interativa, o que é útil para scripts e automação. Por exemplo, ssh usuário@host 'comando' executa o comando no servidor e retorna a saída localmente.
Exemplo básico de conexão:
# Conectar a um servidor remoto
ssh usuario@192.168.1.100
# Executar um comando remoto sem entrar no shell
ssh usuario@192.168.1.100 'uptime'
# Conectar em uma porta diferente (ex.: 2222)
ssh -p 2222 usuario@exemplo.com
# Ativar modo verboso para depuração
ssh -v usuario@exemplo.com
O SSH também oferece opções para encaminhamento de portas (túnel), permitindo acessar serviços internos de forma segura. Por exemplo, ssh -L 8080:localhost:80 usuario@servidor redireciona o tráfego da porta local 8080 para a porta 80 do servidor.
scp e rsync
Para transferir arquivos entre máquinas, temos duas ferramentas principais: scp (secure copy) e rsync. O scp é simples e direto, mas não possui recursos avançados como sincronização incremental. O rsync é mais poderoso, permitindo transferências incrementais, compressão e preservação de atributos.
scp copia arquivos ou diretórios inteiros. A sintaxe é similar ao cp, mas com a especificação de host. Para copiar um arquivo local para o remoto: scp arquivo usuario@host:/caminho/destino. Para copiar do remoto para o local, inverta a ordem.
Exemplos de scp:
# Copiar arquivo local para o servidor
scp /home/user/documento.txt usuario@192.168.1.100:/tmp/
# Copiar diretório recursivamente (-r)
scp -r /home/user/pasta usuario@192.168.1.100:/home/usuario/
# Copiar do servidor para o local
scp usuario@192.168.1.100:/var/log/syslog ./
# Usar porta diferente
scp -P 2222 arquivo usuario@exemplo.com:/destino/
rsync é mais eficiente para grandes volumes de dados, pois transfere apenas as diferenças entre arquivos. Ele também pode preservar permissões, timestamps e links simbólicos. A sintaxe básica: rsync [opções] origem destino. Para transferência remota, use user@host:/caminho.
Exemplos de rsync:
# Sincronizar diretório local para remoto
rsync -avz /home/user/projeto/ usuario@192.168.1.100:/backup/projeto/
# Sincronizar do remoto para local
rsync -avz usuario@192.168.1.100:/var/www/ ./www-backup/
# Usar opção --delete para remover arquivos que não existem mais na origem
rsync -avz --delete /origem/ usuario@host:/destino/
# Compressão e progresso (-z para compressão, --progress para mostrar progresso)
rsync -az --progress arquivo usuario@host:/destino/
Enquanto scp é suficiente para cópias pontuais, rsync é preferível para backups e sincronizações periódicas.
Chaves SSH (visão geral)
A autenticação por senha é vulnerável a ataques de força bruta. Uma alternativa mais segura é usar chaves SSH (pares de chave pública/privada). A chave privada fica no cliente, enquanto a pública é instalada no servidor em ~/.ssh/authorized_keys.
Para gerar um par de chaves, use ssh-keygen. O comando cria os arquivos id_ed25519 (privada) e id_ed25519.pub (pública) por padrão, mas você pode escolher outros algoritmos como RSA. É recomendável proteger a chave privada com uma frase secreta (passphrase).
Depois de gerar, copie a chave pública para o servidor com ssh-copy-id. Esse comando instala a chave automaticamente no arquivo authorized_keys do usuário remoto.
Exemplo de geração e instalação:
# Gerar par de chaves (algoritmo Ed25519)
ssh-keygen -t ed25519 -C "comentario@exemplo.com"
# Copiar chave pública para o servidor
ssh-copy-id usuario@192.168.1.100
# Verificar a chave pública
cat ~/.ssh/id_ed25519.pub
Com as chaves configuradas, você pode conectar-se sem digitar senha (a menos que a chave privada tenha passphrase). Para maior segurança, use um agente SSH (ssh-agent) para armazenar a chave descriptografada em memória.
Boas práticas
SSH é poderoso, mas exige cuidados. Algumas boas práticas incluem desabilitar o login por senha no servidor (após configurar chaves), usar autenticação por chave, alterar a porta padrão (embora não seja uma segurança forte, reduz ruído), e restringir o acesso por IP com firewalls.
Também é importante manter o software SSH atualizado, usar frases secretas fortes para chaves, e nunca compartilhar chaves privadas. Para automação, considere usar ssh-agent e opções como ControlMaster para multiplexar conexões.
Exemplo de configuração no arquivo ~/.ssh/config para simplificar conexões:
# Alias para um servidor
Host meu-servidor
HostName 192.168.1.100
User usuario
Port 22
IdentityFile ~/.ssh/id_ed25519
Com esse arquivo, você pode conectar apenas com ssh meu-servidor.
Referências
- Documentação oficial do OpenSSH
- Página de manual do ssh
- Página de manual do scp
- Página de manual do rsync
- Tutorial de chaves SSH na DigitalOcean
- Como usar o comando scp (Linuxize)
- Exemplos de rsync na Red Hat
Exercícios
- Escreva o comando SSH para conectar-se a um servidor na porta 2222 com o usuário 'admin' no IP 10.0.0.5.
- Copie o arquivo local 'backup.tar.gz' para o diretório /home/user/backups/ no servidor 'meuserver.com' usando scp.
- Use rsync para sincronizar o diretório local 'projeto/' com o diretório remoto '~/backup/projeto/' no servidor 'servidor', preservando permissões e mostrando progresso.
- Explique a diferença entre autenticação por senha e por chave SSH.
- Qual comando você usaria para gerar um par de chaves SSH com algoritmo Ed25519 e depois copiá-la para um servidor? Escreva os dois comandos.
ssh -p 2222 admin@10.0.0.5scp backup.tar.gz usuario@meuserver.com:/home/user/backups/rsync -avz --progress projeto/ usuario@servidor:~/backup/projeto/ssh-keygen -t ed25519
ssh-copy-id usuario@servidorObservações Finais
O SSH é uma ferramenta indispensável no dia a dia de quem administra sistemas. Além dos comandos vistos, explore recursos como encaminhamento de portas, agentes SSH e multiplexação para otimizar seu fluxo de trabalho. Sempre priorize a segurança: use chaves, desative senhas quando possível e mantenha tudo atualizado.