Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

03 - Cliente SSH

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione 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_keys do servidor.
  • Alterações inesperadas em ~/.ssh/config apontando para hosts não corporativos.
  • Presença de ControlPersist prolongado sem justificativa operacional.
  • Processos ssh -L ou ssh -R em 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.