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

02 - Cliente

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

No Modelo Cliente-Servidor do SSH, o Cliente é o componente ativo e interativo que inicia a comunicação. Ele reside na máquina local do usuário (ou no servidor de origem de uma automação) e tem a função de solicitar uma conexão segura para um host remoto. O cliente é o interpretador de comandos do usuário, o gerenciador de suas identidades locais e o responsável por validar se o servidor de destino é realmente confiável.

1. O Papel Ativo do Cliente

Enquanto o servidor (sshd) opera de forma passiva aguardando conexões, o cliente SSH é o gatilho de toda a interação. Ele é executado no espaço de usuário (User Space) e cessa sua execução assim que a sessão é encerrada.

  • Iniciação do Handshake: O cliente abre a conexão TCP em direção à porta do servidor (padrão 22) e envia a primeira string de conformidade do protocolo (ex: SSH-2.0-OpenSSH_9.6). Esta string segue o formato definido na RFC 4253, seção 4.2.
  • Negociação Criptográfica: É o cliente que apresenta a lista de algoritmos de criptografia, hashes (MACs) e métodos de troca de chave (KEX) que ele suporta e confia, forçando o aperto de mão a seguir padrões modernos de segurança.
  • Controle de Estado: O cliente mantém o estado da sessão (chave de sessão, contadores de pacotes, sequência de MAC) em memória pelo tempo da conexão.

2. Responsabilidades Principais do Cliente

O cliente SSH executa funções críticas no seu computador local para garantir a segurança da sessão:

  1. Verificação do Host (known_hosts): Ao receber a Host Key do servidor, o cliente assume a responsabilidade de verificar se o servidor é legítimo. Ele consulta o arquivo local ~/.ssh/known_hosts. Se a chave mudou, o cliente bloqueia a conexão imediatamente para proteger o usuário de um ataque de Man-in-the-Middle, exibindo mensagem de erro catastrófica.
  2. Gerenciamento de Chaves Privadas: O cliente acessa as chaves privadas do usuário (armazenadas em ~/.ssh/id_ed25519, por exemplo) para assinar digitalmente os desafios de autenticação enviados pelo servidor. Ele garante que a chave privada nunca saia da máquina local.
  3. Multiplexação de Canais: O cliente gerencia a criação de múltiplos canais lógicos dentro da mesma conexão TCP criptografada, conforme definido na RFC 4254. Isso permite que você use o mesmo túnel para rodar um terminal interativo, transferir arquivos via SFTP e fazer o redirecionamento de portas locais.
  4. Negociação de Compressão: Pode opcionalmente negociar compressão (zlib@openssh.com) para reduzir largura de banda em links lentos.

3. Tipos de Clientes SSH

O componente cliente pode se manifestar de diversas formas técnicas, dependendo do sistema operacional e da interface escolhida pelo usuário:

  • Linha de Comando (CLI): O binário ssh padrão do pacote OpenSSH, nativo em sistemas Linux, macOS e embutido no PowerShell/Prompt do Windows 10+.
  • Interfaces Gráficas (GUI): Aplicativos como PuTTY, MobaXterm, Termius ou Royal TS, que facilitam o gerenciamento de credenciais, chaves e túneis complexos através de menus visuais. PuTTY usa seu próprio formato PPK para chaves privadas.
  • Clientes Integrados (IDEs): Extensões como o VS Code Remote - SSH ou o protocolo TRAMP do Emacs, onde o editor de código executa o cliente SSH em segundo plano para permitir a edição de arquivos remotos como se fossem locais.
  • Bibliotecas de Programação: Libssh, Paramiko (Python), JSch (Java), ssh2 (Node.js) para integração em aplicações customizadas de automação.

4. Configuração Local (ssh_config)

O comportamento do cliente é altamente personalizável através do arquivo de configuração do usuário, localizado em ~/.ssh/config. Esse arquivo permite encurtar comandos complexos e automatizar o comportamento do cliente:

# Exemplo de configuração no cliente do usuário
Host servidor-producao
    HostName 203.0.113.50
    User administrador
    Port 2222
    IdentityFile ~/.ssh/chave_empresa
    LocalForward 8080 localhost:80
    ServerAliveInterval 60
    ServerAliveCountMax 3

Ao executar apenas ssh servidor-producao, o cliente processa o arquivo, localiza o IP correto, altera a porta para a 2222, injeta a chave correspondente e ainda monta um túnel de porta local de forma transparente para o usuário.

5. Opções Comuns de Linha de Comando

Opção Função
-p PORTA Especifica porta não padrão
-i ARQUIVO Define chave privada a usar
-L porta:host:porta Redirecionamento de porta local
-R porta:host:porta Redirecionamento de porta remota
-D porta Proxy SOCKS dinâmico
-J bastiao Salto via host bastion
-v / -vv / -vvv Verbosidade de debug
-C Ativa compressão
-N Sem shell remoto (apenas túneis)
-f Background após autenticar

6. Conexão via Bastion Host (Jump Host)

Em arquiteturas de rede segregadas, o cliente pode encadear conexões através de hosts intermediários usando a opção -J:

ssh -J bastiao.empresa.com servidor-interno.empresa.com

Isso abre uma conexão TCP ao bastião (único ponto exposto à internet), autentica nele, e a partir dele abre um novo túnel TCP para o servidor interno. O cliente gerencia ambas as conexões como uma única sessão lógica. Configurável também no ssh_config via ProxyJump.

7. Multiplexação de Conexões

Para evitar o custo de re-executar o handshake em cada conexão a um mesmo servidor, o cliente pode manter um socket de controle persistente:

Host *
    ControlMaster auto
    ControlPath ~/.ssh/cm-%r@%h:%p
    ControlPersist 10m

Após a primeira conexão, novas invocações de ssh, scp ou sftp para o mesmo host reutilizam o túnel já estabelecido, reduzindo a latência de estabelecimento de segundos para milissegundos.

8. Validação de Host e Fingerprint

Ao conectar pela primeira vez a um servidor, o cliente exibe o fingerprint da Host Key e pede confirmação:

The authenticity of host 'servidor (203.0.113.50)' can't be established.
ED25519 key fingerprint is SHA256:abc123...
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Após confirmação, a chave é adicionada a ~/.ssh/known_hosts. Em conexões subsequentes, o cliente compara silenciosamente. Qualquer divergência é tratada como ataque potencial e a conexão é abortada com mensagem de alerta vermelho.

9. Conclusão

O Cliente SSH é a porta de entrada do usuário para o mundo da administração remota segura. Sua flexibilidade de configuração, capacidade de encadeamento via bastiões, multiplexação de canais e validação rigorosa de Host Keys o tornam uma ferramenta indispensável para engenheiros de infraestrutura. Dominar as opções do ssh_config e as práticas de gestão de chaves privadas é o que diferencia um operador casual de um administrador de sistemas de alto desempenho.

10. Integração com Automação Moderna

Em arquiteturas DevOps e infraestrutura como código, o cliente SSH é invocado programaticamente por ferramentas como Ansible, Terraform, Chef e Puppet. Essas ferramentas assumem que a autenticação foi pré-configurada via chaves e ssh-agent, permitindo execução não interativa em centenas de servidores simultaneamente. A combinação com ProxyJump (bastião) e ControlMaster (multiplexação) viabiliza operações em larga escala com latência mínima, tornando o cliente SSH um componente silencioso, porém crítico, da esteira de automação moderna.