Shell Seguro (SSH)
SSH é o protocolo que executa a metade invisível da Internet: cada console remoto do administrador do sistema, cada etapa de implantação do desenvolvedor, cada push do Git para um repositório privado. Ele substituiu o telnet no final da década de 1990 e tem sido o protocolo de shell seguro padrão desde então. Saber o que ele realmente faz faz com que muitas operações funcionem e façam sentido.
O corpo completo do artigo é fornecido em inglês abaixo.
SSH (Secure Shell) é um protocolo de rede criptográfico para operar serviços de rede com segurança em uma rede não segura. Mais comumente usado para login remoto de linha de comando (o "shell" no nome) e para transferência de arquivos, mas o protocolo subjacente é geral o suficiente para encapsular qualquer aplicativo TCP. O SSH foi criado por Tatu Ylönen em 1995 após um ataque de detecção de senha em sua universidade; a implementação do OpenSSH (iniciada em 1999) é a versão mais implantada atualmente.
O que o SSH fornece
Três propriedades:
- Confidencialidade - criptografado em trânsito. Os observadores da rede veem bytes criptografados, não comandos ou senhas.
- Integrity — pacotes modificados são detectados e rejeitados.
- Autenticação de ambas as extremidades — o cliente se autentica no servidor (senha, chave pública ou outro método) e o servidor se autentica no cliente (via host chave).
A combinação substitui o conjunto antigo de telnet, rlogin, rsh e rcp - todos transmitindo credenciais em texto simples.
Como funcionam as conexões SSH
O aperto de mão, simplificado:
- Cliente abre a conexão TCP com o servidor na porta 22 (configurável).
- Ambos os lados trocam strings de versão.
- Ambos os lados trocam algoritmos suportados; escolha a cifra mútua mais forte, KEX, troca MAC.
- Key - normalmente curvas X25519 ou NIST atualmente. Ambos os lados derivam um segredo compartilhado sem que ele atravesse a rede em texto simples.
- O servidor envia sua chave de host, assinada com o segredo compartilhado. O cliente verifica ~/.ssh/known_hosts.
- A partir deste ponto, tudo é criptografado com chaves derivadas do segredo compartilhado.
- O cliente autentica - por senha, chave pública ou algum outro mecanismo.
- A sessão criptografada está aberta. O cliente solicita um shell, transferência de arquivos, encaminhamento de porta ou o que quer que ele realmente queira.
Métodos de autenticação
- Password. O usuário digita uma senha; é enviado criptografado dentro da sessão. Simples, mas vulnerável a ataques de preenchimento de credenciais contra servidores SSH expostos.
- Chave pública. O cliente possui uma chave privada (normalmente em
~/.ssh/id_ed25519); o servidor possui a chave pública correspondente em~/.ssh/authorized_keys. O cliente comprova a posse da chave privada assinando um desafio do servidor. Nenhuma senha atravessa a rede. O padrão recomendado para quase todos os casos de uso. - Baseado em certificado. Uma CA assina um certificado para a chave do usuário, incluindo expiração e restrições. Os servidores confiam na CA e confiam automaticamente nos certificados assinados. O modelo certo para organizações com muitos usuários; substitui o pesadelo de distribuição de chave ssh.
- FIDO2 / chave de hardware SSH. OpenSSH recente suporta chaves apoiadas por um token de segurança de hardware. À prova de phishing, requer posse física.
- Multifator — combine os itens acima. Senha + chave ou senha + token de hardware.
Além do acesso ao shell: encaminhamento de porta
SSH pode encapsular o tráfego TCP arbitrário por meio da sessão criptografada:
- Encaminhamento de porta local (
-L):ssh -L 9000:internal:3306 user@bastionabre a porta local 9000, que faz o tunelamento parainternal:3306por meio do host bastião. Útil para alcançar serviços internos através de um host de salto. - Encaminhamento de porta remoto (
-R): a direção oposta. O host remoto obtém uma porta que faz o túnel de volta para um serviço em sua máquina. - Encaminhamento de porta dinâmico (
-D): SSH cria um proxy SOCKS5 em sua máquina local. Qualquer aplicativo apontado para ele tem seu tráfego TCP encapsulado por meio da sessão SSH. Efetivamente, uma VPN de usuário único sobre SSH.
SSH o encaminhamento dinâmico é a VPN mais útil para pessoas pobres; todo mundo que tem um servidor em algum lugar tem acesso a ele.
O ecossistema OpenSSH
- ssh — o cliente
- sshd — o daemon do servidor
- scp — cópia segura (legado, agora substituído principalmente por sftp sob o capuz)
- sftp — FTP seguro, um protocolo separado que é executado dentro de SSH
- ssh-agent — armazena em cache as chaves descriptografadas na memória para que você não insira a senha por connection
- ssh-keygen — gera pares de chaves
- ssh-copy-id — copia sua chave pública para um arquivo de chaves_autorizadas remoto
Defendendo um servidor SSH
An O servidor SSH na Internet pública vê constantemente verificações de preenchimento de credenciais. As defesas:
- Desativar autenticação por senha. Somente chaves públicas. Remove todo o vetor de ataque de preenchimento de credenciais.
- Use chaves Ed25519. Moderno, rápido, pequeno.
ssh-keygen -t ed25519é o comando correto para novas chaves. - Use uma porta não padrão. Marginal; reduz principalmente o ruído de log do scanner.
- fail2ban ou sshguard - bloqueia IPs após repetidas tentativas fracassadas.
- Limitar contas de usuário que podem usar SSH.
AllowUsersem sshd_config. - Use uma VPN ou Tailscale - não exponha o SSH à Internet pública se puder evitá-lo.
- Auditar hosts_conhecidos e chaves_autorizadas. Remova chaves para usuários que partiram; verifique se há entradas inesperadas.
Perguntas frequentes
- Qual porta o SSH usa?
- 22 por padrão. A porta é configurável; algumas operadoras movem o SSH para uma porta não padrão para reduzir o tráfego de varredura nos logs. Isto é segurança através da obscuridade – útil para a higiene, não para a segurança real. A verdadeira segurança é a autenticação forte.
- O SSH é mais seguro que o HTTPS?
- Diferentes modelos de ameaças. Ambos usam criptografia moderna e são essencialmente igualmente seguros no nível do protocolo. O SSH normalmente é usado com autenticação de chave pública (sem senhas, muito forte), enquanto muitos sites HTTPS ainda usam autenticação por senha (mais fraca por padrão). Os protocolos são pares; as práticas de implantação variam.
- Posso usar SSH para transferência de arquivos?
- Sim. <code>scp</code> e <code>sftp</code> são executados em SSH. SFTP é a escolha moderna mais capaz – transferências recuperáveis, operações recursivas, gravações atômicas. <code>rsync</code> também pode usar SSH como transporte e é a ferramenta certa para qualquer transferência não trivial.
- O que é uma chave SSH?
- Um par de chaves pública/privada usado para autenticação. A chave privada reside em <code>~/.ssh/id_*</code> em sua máquina; a chave pública é instalada em <code>~/.ssh/authorized_keys</code> nos servidores aos quais você se conecta. A perda da chave privada sem uma senha é um problema sério – qualquer pessoa com ela pode fazer login como você. Sempre proteja as chaves SSH com uma senha longa.
- Por que o SSH diz 'chave do host alterada'?
- A chave de identidade do servidor mudou desde sua última conexão — ou o servidor foi reconstruído, a chave foi rotacionada ou algo está errado (o caso mais preocupante: alguém está se passando pelo servidor). Não aceite cegamente a nova chave; verifique fora de banda com o operador do servidor. Se for uma rotação legítima, remova a chave antiga deknown_hosts e aceite a nova.