SSH e acesso remoto
Esta aula aborda o uso de SSH para acesso remoto seguro, incluindo geração e gerenciamento de chaves, conexão a servidores, transferência de arquivos com scp e rsync, e boas práticas de segurança. O conteúdo é prático e voltado para profissionais de DevOps.
SSH (Secure Shell) é um protocolo de rede que permite acesso remoto seguro a sistemas, criptografando toda a comunicação entre cliente e servidor. É ferramenta essencial para administradores de sistemas e profissionais DevOps, pois possibilita gerenciar servidores, executar comandos e transferir arquivos de forma segura.
Nesta aula, você aprenderá a configurar chaves SSH, conectar-se a servidores remotos, transferir arquivos com scp e rsync, e adotar boas práticas para manter seu ambiente seguro.
Chaves SSH
As chaves SSH são um par de arquivos (chave privada e chave pública) que autenticam um usuário sem necessidade de senha. A chave privada fica no cliente (nunca compartilhada), e a pública é instalada no servidor. Quando o cliente tenta se conectar, o servidor usa a chave pública para criptografar um desafio que só pode ser decifrado pela chave privada.
Para gerar um par de chaves, use o comando ssh-keygen. Por padrão, ele cria chaves RSA de 3072 bits (ou 2048 em versões antigas). Você pode especificar o tipo (-t rsa, -t ed25519) e o tamanho (-b 4096). O ED25519 é recomendado por ser mais rápido e seguro.
# Gerar chave RSA de 4096 bits
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -C "seu@email.com"
# Gerar chave ED25519
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "seu@email.com"Após gerar, você terá dois arquivos: id_rsa (privada) e id_rsa.pub (pública). A chave pública deve ser copiada para o servidor. O comando ssh-copy-id facilita isso:
ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@servidorIsso adiciona a chave pública ao arquivo ~/.ssh/authorized_keys do servidor.
Conexão segura
Com as chaves instaladas, você pode conectar-se ao servidor sem senha:
ssh usuario@servidorSe a porta SSH não for a padrão (22), use -p:
ssh -p 2222 usuario@servidorPara maior segurança, desabilite o login por senha no servidor editando /etc/ssh/sshd_config:
# Desabilitar login por senha
PasswordAuthentication no
# Desabilitar login root
PermitRootLogin noReinicie o serviço SSH: sudo systemctl restart sshd.
Use o arquivo de configuração ~/.ssh/config para simplificar conexões frequentes:
Host meuservidor
HostName 192.168.1.100
Port 2222
User admin
IdentityFile ~/.ssh/id_ed25519Depois, basta digitar ssh meuservidor.
scp e rsync
scp (secure copy) copia arquivos entre hosts usando SSH. Exemplo:
# Copiar arquivo local para servidor
scp arquivo.txt usuario@servidor:/caminho/destino/
# Copiar diretório recursivamente
scp -r pasta/ usuario@servidor:/caminho/destino/rsync é mais avançado: sincroniza arquivos e pastas de forma eficiente, copiando apenas diferenças. É ideal para backups e deploys.
# Sincronizar diretório local para servidor
rsync -avz pasta/ usuario@servidor:/caminho/destino/
# Sincronizar do servidor para local
rsync -avz usuario@servidor:/caminho/origem/ pasta/Explicação das flags: -a (arquivo, preserva permissões, dono, etc.), -v (verbose), -z (compressão). Para deletar arquivos no destino que não existem na origem, use --delete (cuidado!).
Boas práticas
- Use chaves fortes: Prefira ED25519 ou RSA de pelo menos 4096 bits.
- Proteja a chave privada: Defina permissão 600 (
chmod 600 ~/.ssh/id_rsa) e nunca a compartilhe. - Use frase secreta (passphrase): Adicione uma ao gerar a chave para proteger contra roubo. O
ssh-agentpode armazená-la temporariamente. - Desabilite autenticação por senha: Após configurar chaves, desligue
PasswordAuthenticationno servidor. - Restrinja acesso por IP: Use
AllowUserseMatch Addressnosshd_config. - Mude a porta padrão (22): Isso reduz ataques automatizados.
- Mantenha o software atualizado: Atualize o OpenSSH regularmente.
- Use agent forwarding com cautela: Evite
ssh -Aem hosts não confiáveis.
Referências
- OpenSSH Manual
- SSH Academy
- ssh(1) - Linux man page
- scp(1) - Linux man page
- rsync(1) - Linux man page
- GitHub: Connecting with SSH
Exercícios
- Gere um par de chaves SSH ED25519 com comentário "devops@exemplo.com" e liste os arquivos criados.✓ Resposta: Comando:
Os arquivos criados sãossh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "devops@exemplo.com"~/.ssh/id_ed25519(privada) e~/.ssh/id_ed25519.pub(pública). - Copie sua chave pública para um servidor remoto e conecte-se sem senha.✓ Resposta: Use
ssh-copy-id usuario@servidore depoisssh usuario@servidor. Se não tiverssh-copy-id, manualmente:cat ~/.ssh/id_ed25519.pub | ssh usuario@servidor "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" - Configure o arquivo ~/.ssh/config para conectar ao host "dev-server" na porta 2222 com usuário "admin".✓ Resposta: Adicione ao
~/.ssh/config:
Depois conecte comHost dev-server HostName 192.168.1.100 Port 2222 User admin IdentityFile ~/.ssh/id_ed25519ssh dev-server. - Use scp para copiar o diretório local "logs/" para o servidor remoto em /var/backups.✓ Resposta:
scp -r logs/ usuario@servidor:/var/backups/ - Use rsync para sincronizar o diretório local "projeto/" com o servidor remoto em ~/projeto, deletando arquivos que não existem mais localmente.✓ Resposta:
Cuidado:rsync -avz --delete projeto/ usuario@servidor:~/projeto/--deleteremove arquivos no destino que não estão na origem.