SSH
O SSH (Secure Shell) é um protocolo de rede utilizado para acessar e gerenciar dispositivos remotamente de forma segura. Ele substitui protocolos mais antigos e inseguros como o Telnet, oferecendo criptografia, autenticação e integridade dos dados durante a comunicação.
🔐 O que é SSH?
-
SSH significa Secure Shell.
-
Ele permite acesso remoto a sistemas e servidores usando uma interface de terminal.
-
Fornece um canal seguro sobre uma rede insegura (como a internet).
-
Opera normalmente na porta 22/tcp.
🎯 Para que serve o SSH?
-
Acessar servidores remotos via linha de comando (como servidores Linux).
-
Copiar arquivos de forma segura com SCP ou SFTP.
-
Executar comandos remotos.
-
Encaminhar conexões com túneis SSH (port forwarding).
-
Criar túneis VPN-like para criptografar tráfego.
🧱 Como o SSH funciona?
-
O cliente (por exemplo,
ssh user@192.168.0.1) tenta se conectar ao servidor. -
O servidor envia sua chave pública.
-
O cliente verifica a chave e começa uma negociação criptografada.
-
O usuário faz login com senha ou chave SSH privada.
-
Após autenticação, a sessão é iniciada com criptografia fim a fim.
🔐 Autenticação no SSH
Existem duas formas principais:
1. Senha
- O usuário digita sua senha para se autenticar.
2. Chave pública/privada
-
O usuário gera um par de chaves (
ssh-keygen) e envia a chave pública ao servidor (~/.ssh/authorized_keys). -
A autenticação é feita com a chave privada local.
📦 Exemplos de uso do SSH
1. Conectar-se a um servidor
ssh usuario@192.168.0.12. Usar uma porta diferente
ssh -p 2222 usuario@192.168.0.13. Copiar arquivos com SCP
scp arquivo.txt usuario@192.168.0.1:/home/usuario/4. Redirecionamento de porta (port forwarding)
ssh -L 8080:localhost:80 usuario@192.168.0.1Encaminha sua porta 8080 local para a 80 do servidor via túnel SSH.
5. Login com chave
ssh -i ~/.ssh/minha-chave usuario@192.168.0.1🛡️ Segurança no SSH
-
Utilize autenticação por chave pública, desativando senhas (
PasswordAuthentication no). -
Use fail2ban ou outras ferramentas para evitar brute-force.
-
Altere a porta padrão (22) para uma porta alta.
-
Desative o login de root direto (
PermitRootLogin no).
✅ Parte 1: Gerar e usar chave SSH (lado do cliente)
🔧 Passo 1: Gerar par de chaves (cliente)
No seu terminal (Linux/macOS ou Git Bash no Windows), execute:
ssh-keygen -t rsa -b 4096 -C "seu@email.com"-
Pressione Enter para aceitar o local padrão (
~/.ssh/id_rsa). -
Você pode definir uma senha para proteger a chave privada (opcional, mas recomendado).
🗂 Resultado:
-
~/.ssh/id_rsa → chave privada (guarde com segurança).
-
~/.ssh/id_rsa.pub → chave pública (para copiar no servidor).
✅ Parte 2: Enviar chave pública para o servidor
Se você já tem acesso SSH com senha, execute:
ssh-copy-id usuario@ip_do_servidorOu manualmente:
scp ~/.ssh/id_rsa.pub usuario@ip_do_servidor:/tmp/
ssh usuario@ip_do_servidor
mkdir -p ~/.ssh
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
rm /tmp/id_rsa.pub✅ Parte 3: Testar acesso com chave
Agora, tente se conectar sem usar senha:
ssh usuario@ip_do_servidorSe você configurou corretamente, ele usará sua chave privada.
🛠️ Parte 4: Configurar o servidor SSH (Linux)
Editar o arquivo de configuração:
sudo nano /etc/ssh/sshd_configAjuste ou verifique os seguintes parâmetros:
Port 22 # ou altere para outra porta
PermitRootLogin no # evita login direto como root
PasswordAuthentication no # desativa login por senha
PubkeyAuthentication yes # garante que login por chave está ativoReinicie o serviço SSH:
sudo systemctl restart ssh(Opcional) Alterar porta para reduzir tentativas de ataque:
Port 2222Lembre-se de ajustar seu firewall (ex: ufw allow 2222).
🧪 Testar com a nova porta:
ssh -p 2222 usuario@ip_do_servidorAutenticação via certificados
A autenticação via certificados no SSH é diferente da autenticação com chaves públicas tradicionais (id_rsa ou id_ed25519). Com certificados, uma autoridade (normalmente você mesmo ou uma CA interna) assina uma chave pública, e o servidor SSH só confia em chaves assinadas por essa autoridade.
Isso permite uma gestão centralizada de acesso SSH — muito útil para ambientes corporativos com muitos usuários e servidores.
🧾 Conceitos-chave
-
🔑 Chave pública do usuário → como no SSH tradicional.
-
📄 Certificado SSH → a chave pública assinada por uma CA SSH.
-
🛡️ CA (Certificate Authority) → entidade que assina as chaves.
-
🔐 O servidor SSH aceita apenas conexões cujas chaves foram assinadas por uma CA confiável.
🛠️ Como funciona na prática
✅ 1. Criar uma CA (autoridade certificadora)
No computador da CA (pode ser o seu):
ssh-keygen -f ~/.ssh/ssh_ca -C "Minha CA SSH"Isso gera:
-
ssh_ca(chave privada da CA) — NUNCA compartilhar -
ssh_ca.pub(chave pública da CA) — usada nos servidores
✅ 2. Criar uma chave pública do usuário
No computador do usuário (cliente):
ssh-keygen -f ~/.ssh/id_ed25519 -C "usuario@empresa"✅ 3. Assinar a chave pública com a CA
No computador da CA:
ssh-keygen -s ~/.ssh/ssh_ca -I usuario-cert -n usuario -V +52w ~/.ssh/id_ed25519.pubExplicação:
-
-s: chave privada da CA -
-I: identificador do certificado -
-n: nome do usuário válido para essa chave -
-V: validade (por exemplo,+52w= 1 ano)
Resultado: um certificado SSH chamado id_ed25519-cert.pub.
✅ 4. Configurar o servidor SSH para confiar na CA
No servidor SSH:
- Copie a chave pública da CA para o servidor:
scp ~/.ssh/ssh_ca.pub usuario@servidor:/etc/ssh/- Edite o
/etc/ssh/sshd_confige adicione:
TrustedUserCAKeys /etc/ssh/ssh_ca.pub- Reinicie o serviço SSH:
sudo systemctl restart ssh✅ 5. Conectar usando o certificado
No cliente, use:
ssh -i ~/.ssh/id_ed25519 usuario@servidorO SSH usará automaticamente id_ed25519-cert.pub se ele estiver presente ao lado da chave privada.
📌 Resumo visual do fluxo
[Usuário]
|
| cria chave → id_ed25519.pub
|
[CA]
|
| assina chave → id_ed25519-cert.pub
|
[Servidor]
|
| confia na CA → ssh_ca.pub
|
[Usuário] → conecta com certificado → acesso autorizado