03 - Cliente SSH
video: https://youtu.be/... no frontmatter da nota.O Cliente SSH (ssh) é a ferramenta técnica de interface que permite a um usuário humano ou a um sistema automatizado solicitar, negociar e estabelecer um túnel de comunicação seguro contra um servidor remoto. Implementado predominantemente pelo binário OpenSSH ssh, o cliente é responsável por ler os parâmetros do usuário, validar a identidade do hospedeiro de destino e apresentar as credenciais necessárias para a autorização de acesso. Diferente de um simples terminal, o cliente SSH é um orquestrador complexo de criptografia e tunelamento que abstrai a insegurança da rede física para o operador.
1. O Binário de Solicitação e Parâmetros
A execução do cliente ssh desencadeia uma série de verificações de ambiente antes do primeiro bit de rede ser enviado.
- Leitura de Configurações: O cliente processa primeiro os argumentos de linha de comando, seguidos pelo arquivo de configuração do usuário (~/.ssh/config) e, por fim, a configuração global do sistema (/etc/ssh/ssh_config).
- Resolução de Host: O cliente identifica o IP de destino e a porta (padrão 22) para iniciar o handshake TCP inicial.
Parâmetros de Linha de Comando Mais Utilizados
| Parâmetro | Função |
|---|---|
-p <porta> |
Porta de destino (default 22) |
-i <arquivo> |
Caminho da chave privada a utilizar |
-l <user> |
Usuário para login |
-v / -vv / -vvv |
Níveis crescentes de depuração |
-L <lport>:<rhost>:<rport> |
Forward local de porta |
-R <rport>:<lhost>:<lport> |
Forward remoto de porta |
-D <porta> |
SOCKS proxy dinâmico |
-J <jump> |
ProxyJump por host bastião |
-N |
Não abre shell (útil para túneis) |
-f |
Background após autenticar |
-A |
Habilita agent forwarding |
-Y / -X |
Habilita X11 forwarding |
2. A Gestão da Confiança: known_hosts
A tarefa mais crítica do cliente SSH é garantir que o servidor remoto é legítimo (Prevenção de MITM).
- known_hosts: O cliente mantém um banco de dados local com as chaves públicas (identidades) de todos os servidores que já visitou.
- Validação de Identidade: Se a chave do servidor enviada durante o handshake não bater com o registro no known_hosts, o cliente bloqueia a conexão e exibe um erro critico, obrigando o usuário a validar manualmente se a infraestrutura foi alterada ou se está sob ataque.
Estrutura do Arquivo known_hosts
Cada linha contém: hosts permitidos, tipo de chave, e a chave pública em base64:
servidor.empresa.com,200.10.10.5 ssh-ed25519 AAAAC3NzaC1lZDI1...
Em ambientes corporativos, é comum pré-popular esse arquivo via Puppet, Ansible ou Chef, garantindo que todos os operadores confiem nos mesmos hosts desde o primeiro acesso.
3. O Arquivo de Configuração do Usuário (~/.ssh/config)
Para administradores profissionais, digitar longos comandos com múltiplos parâmetros é ineficiente. O arquivo config permite criar atalhos:
- Aliases: Transformar ssh admin@servidor01.producao.empresa.com.br -p 2222 no simples comando ssh prod01.
- Automatização de Tunelamento: Permitir que certas conexões abram automaticamente redirecionamento de porta locais ou remotos.
- ProxyJump: Configura saltos (Jump Hosts) diretamente no arquivo, permitindo atravessar bastiões de segurança de forma transparente para o usuário.
Exemplo de Configuração Avançada
Host prod01
HostName servidor01.producao.empresa.com.br
User admin
Port 2222
IdentityFile ~/.ssh/prod_ed25519
ForwardAgent yes
ServerAliveInterval 60
Host db-internal
HostName 10.0.5.20
User dbadmin
ProxyJump prod01
IdentityFile ~/.ssh/db_ed25519
Host *
ServerAliveInterval 30
ServerAliveCountMax 3
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
A diretiva ControlMaster habilita multiplexação de conexões: uma vez estabelecido o túnel TCP inicial, conexões subsequentes ao mesmo host reutilizam o socket, reduzindo o overhead de handshake criptográfico de segundos para milissegundos.
4. Tunelamento e Encaminhamento de Portas
Local Port Forwarding (-L)
Encaminha uma porta local do cliente para um host:porta acessível a partir do servidor. Típico para acessar banco de dados interno sem expô-lo à Internet:
ssh -L 5432:db-interno:5432 user@bastiao.empresa.com
Remote Port Forwarding (-R)
Permite que o servidor exponha uma porta reversa que alcance um host acessível pelo cliente. Usado para ingressar em redes internas atrás de NAT:
ssh -R 8080:localhost:80 user@vps-publica.com
Dynamic Port Forwarding (-D)
Cria um proxy SOCKS5 local, permitindo que navegadores ou outros aplicativos roteiem tráfego através do servidor SSH:
ssh -D 1080 user@servidor-remoto
Útil para tunelar tráfego através de redes hostis (Wi-Fi público, países com censura).
5. Perspectiva de Cyber Security e Hardening do Cliente
Embora o servidor seja o alvo principal, o cliente SSH também precisa ser protegido para evitar o roubo de identidades.
Proteção da Pasta .ssh
As permissões do sistema de arquivos são a primeira linha de defesa contra outros usuários locais.
- Nível de Acesso: O diretório ~/.ssh deve possuir permissão 700 (apenas o dono lê e escreve). Chaves privadas (id_rsa, id_ed25519) devem possuir permissão 600. O cliente SSH recusará o uso de chaves que possuam permissões "abertas para o grupo ou outros", protegendo o usuário contra a cópia acidental de suas credenciais.
Uso do ssh-agent e Forwarding
O agente de autenticação mantém as chaves privadas na memória.
- Agent Forwarding (-A): Permite que você use suas chaves locais em servidores remotos sem precisar copiá-las para lá.
- Aviso de Segurança: O encaminhamento do agente deve ser usado com extrema cautela, apenas contra servidores de alta confiança, pois um administrador root no servidor alvo poderia usar o soquete do seu agente para se autenticar em outras máquinas em seu nome.
Chaves Resistentes a Phishing: FIDO2 / Hardware Tokens
Desde o OpenSSH 8.2, é possível armazenar chaves Ed25519 diretamente em tokens hardware como YubiKey:
ssh-keygen -t ed25519-sk -f ~/.ssh/yubi_ed25519
A chave privada nunca sai do dispositivo; cada assinatura exige toque físico do usuário, mitigando roubo remoto de credenciais mesmo em servidores comprometidos.
6. Ferramentas Companheiras do Cliente
| Ferramenta | Função |
|---|---|
scp |
Cópia de arquivos ponto-a-ponto sobre SSH |
sftp |
Substituto moderno do FTP, sobre SSH |
rsync -e ssh |
Sincronização eficiente com delta-transfer |
ssh-keygen |
Geração de chaves, conversão e impressão digital |
ssh-keyscan |
Coleta de chaves públicas de múltiplos hosts |
ssh-copy-id |
Instalação de chave pública em servidor remoto |
ssh-add |
Carrega chave no ssh-agent |
7. Auditoria Técnica e Diagnóstico de Cliente
Depurar problemas de conexão exige o uso de níveis de verbosidade:
# Executando o cliente em modo de depuração máxima (Nível 3)
ssh -vvv usuario@alvo.com
# Verificando se a chave correta está sendo enviada (Identidade)
ssh -i /caminho/minha_chave.pem usuario@host
# Testando a conectividade sem abrir um shell (útil para scripts de monitoramento)
ssh -q usuario@host exit && echo "Conectado"
# Listando todas as cifras e KEX suportados pelo cliente
ssh -Q cipher
ssh -Q kex
ssh -Q key
# Verificando a impressão digital (fingerprint) de uma chave
ssh-keygen -lf ~/.ssh/id_ed25519.pub
Sinais de Comprometimento do Cliente
- Chaves desconhecidas em
~/.ssh/authorized_keysdo servidor. - Alterações inesperadas em
~/.ssh/configapontando para hosts não corporativos. - Presença de
ControlPersistprolongado sem justificativa operacional. - Processos
ssh -Loussh -Rem execução persistente não documentados.
8. Conclusão: O Controle do Ponto de Entrada
O Cliente SSH é o posto de comando de um administrador de sistemas. Sua precisão na negociação de cifras e sua rigorosa gestão de identidades no known_hosts são o que mantém a infraestrutura protegida em uma rede aberta. Domine a orquestração de parâmetros no arquivo config, explore o tunelamento (local, remoto e dinâmico), proteja suas chaves privadas com permissões restritivas e considere tokens FIDO2 para acesso a ativos críticos. Garantindo que o seu acesso aos servidores da organização seja uma transação privada, íntegra e soberana em qualquer lugar do mundo.