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

02 - Executado pelo Usuário

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

Cliente SSH Executado pelo Usuário

No modelo de componentes do SSH (Secure Shell), o Cliente SSH é a peça de software explicitamente executada pelo usuário (ou por um processo agindo em seu nome). Enquanto o servidor (sshd) é um serviço de sistema que roda passivamente em segundo plano, o cliente é uma ferramenta interativa e efêmera, invocada no espaço de usuário (User Space) para estabelecer uma ponte de comunicação com um nó remoto.


1. Invocação e Espaço de Usuário

Diferente de processos privilegiados do kernel, o cliente SSH (binário ssh no Linux/Unix, presente em /usr/bin/ssh) opera sob o contexto e as permissões do usuário que o executa.

  • Contexto de Execução: Quando um usuário digita ssh user@host, o sistema operacional cria um novo processo com o PID (Process ID) pertencente a esse usuário. O processo herda as variáveis de ambiente, permissões de arquivo e limites de recurso (ulimit) do usuário.
  • Acesso a Recursos Locais: O cliente tem acesso apenas aos arquivos que o usuário pode ler, como as chaves privadas em ~/.ssh/id_rsa e as configurações personalizadas em ~/.ssh/config.
  • Sem Privilégios de Root: Não é necessário ser root para usar o cliente SSH. O setuid bit não é aplicado ao binário ssh, garantindo isolamento de segurança.

2. Sintaxe Básica e Opções Comuns

A linha de comando do OpenSSH client possui dezenas de opções. As mais usadas no dia a dia de operação de redes:

Opção Função
-p Porta alternativa (default 22)
-i Caminho para chave privada específica
-l Nome de usuário (alternativa a user@host)
-L Forward local de porta (Local Port Forwarding)
-R Forward remoto de porta (Remote Port Forwarding)
-D Túnel SOCKS dinâmico (proxy local)
-J Jump host (proxy jump) — conexão via bastion
-N Não executar comando remoto (apenas túnel)
-f Background após autenticação
-v Modo verbose (debug — -vv e -vvv para mais detalhe)
-C Compressão de dados (útil em links lentos)
-X Forward X11 (interface gráfica)
-Y Forward X11 trusted (sem restrições de segurança)
-o Opção avulsa de configuração (ex: -o StrictHostKeyChecking=no)

Exemplos de Invocação

# Conexao simples com usuario e porta customizada
ssh -p 2222 admin@192.168.1.100

# Usando chave privada especifica
ssh -i ~/.ssh/chave_producao deploy@srv-prod-01.empresa.com

# Tunnel local: redireciona porta 8080 local para 80 do host remoto
ssh -L 8080:localhost:80 user@gateway.empresa.com

# SOCKS proxy dinamico na porta 1080
ssh -D 1080 -N -f user@vpn.empresa.com

# Conexao via jump host (bastion)
ssh -J admin@bastion.empresa.com dev@host-interno.empresa.com

# Modo verbose para depuracao de autenticacao
ssh -vvv user@host.com

3. Responsabilidades da Execução pelo Usuário

Ao executar o cliente, o usuário delega a ele funções críticas de segurança e interface:

  • Fornecimento de Credenciais: O cliente interage com o terminal para solicitar senhas ou passphrases de chaves privadas, garantindo que essas informações sensíveis não fiquem expostas em logs de sistema.
  • Gerenciamento de Identidades: O usuário pode carregar múltiplas chaves em um SSH Agent (ssh-add), permitindo que o cliente recupere identidades digitais de forma segura sem intervenção constante.
  • Configuração de Ambiente: Através da execução, o usuário define parâmetros de sessão, como o encaminhamento de portas (Port Forwarding), compressão de dados ou o encaminhamento de interface gráfica (X11).

4. Ferramentas de Cliente SSH

A execução pelo usuário pode ocorrer através de diversas interfaces, dependendo do sistema operacional:

  • OpenSSH Client: O padrão em sistemas Linux, macOS e versões recentes do Windows (10/11 via PowerShell/CMD). É puramente baseado em linha de comando. Adotado como implementação de referência pela IETF.
  • PuTTY / MobaXterm: Clientes com interface gráfica (GUI) populares no Windows, que facilitam a gestão de perfis de conexão, túneis e sessões salvas.
  • TRAMP (Emacs) / VS Code Remote: Editores de texto que executam o cliente SSH internamente para permitir que o usuário edite arquivos remotos como se fossem locais.
  • Termius / Royal TSX: Clientes corporativos com sincronização de credenciais entre dispositivos e recursos de equipe.

5. Configuração ~/.ssh/config

Uma das maiores vantagens da execução pelo usuário é a capacidade de personalizar o comportamento do cliente através do arquivo ~/.ssh/config. Isso permite simplificar comandos complexos:

# Alias para servidor de producao
Host prod
    HostName 200.100.50.25
    User admin
    Port 2222
    IdentityFile ~/.ssh/chave_producao
    ServerAliveInterval 60
    ServerAliveCountMax 3

# Alias para servidor interno via bastion
Host interno
    HostName 10.0.0.50
    User dev
    ProxyJump bastion.empresa.com
    IdentityFile ~/.ssh/id_ed25519

# Configuracao global para todos os hosts da empresa
Host *.empresa.com
    User meu_usuario
    PreferredAuthentications publickey
    Compression yes
    ForwardAgent no

Ao executar apenas ssh prod, o cliente processa essas diretivas de usuário para automatizar a requisição de conexão. O arquivo ~/.ssh/config deve ter permissões 600 (leitura apenas pelo dono).

6. Ciclo de Vida do Processo Cliente

A execução do cliente SSH é temporária e atrelada à sessão:

  1. Início: O processo nasce quando a conexão é solicitada. O cliente lê ~/.ssh/config e ~/.ssh/known_hosts.
  2. Negociação de Versão: Cliente e servidor trocam strings de identificação (SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.4).
  3. Negociação de Algoritmos: São escolhidos algoritmos de cifragem, MAC, key exchange e compressão.
  4. Key Exchange (KEX): Estabelecida a chave simétrica de sessão (Diffie-Hellman, ECDH, Curve25519).
  5. Autenticação de Usuário: Cliente prova sua identidade (senha, chave pública, Kerberos, GSSAPI).
  6. Manutenção: O processo permanece ativo enquanto o túnel estiver aberto, mantendo os descritores de arquivo (stdin, stdout, stderr) conectados ao servidor remoto.
  7. Término: O processo morre assim que o usuário digita exit, o servidor encerra a sessão ou ocorre um erro de rede. Diferente do servidor, o cliente não "reloga" automaticamente a menos que seja configurado para tal via ServerAliveInterval.

7. Port Forwarding pelo Cliente

O cliente SSH é uma ferramenta poderosa de tunneling pela capacidade de redirecionar portas TCP (e com -D, criar proxy SOCKS dinâmico):

Local Port Forwarding (-L)

# Acessa servico interno da empresa atraves do gateway
ssh -L 5432:10.0.0.20:5432 user@gateway.empresa.com
# Agora `psql -h localhost -p 5432` acessa o PostgreSQL interno

Remote Port Forwarding (-R)

# Expoe servico local para o servidor remoto (util em NAT traversal)
ssh -R 8080:localhost:80 user@host-remoto.com
# O host remoto pode ser acessado via localhost:8080 la

Dynamic SOCKS Proxy (-D)

# Cria proxy SOCKS5 na porta 1080
ssh -D 1080 -N -f user@vpn.empresa.com
# Configurar navegador/firefox para usar socks5://localhost:1080

8. Segurança na Execução Local

Como o cliente é executado pelo usuário, ele é um alvo para ataques locais:

  • Sequestro de Sessão: Se um atacante ganhar acesso ao usuário local, ele pode tentar interceptar a memória do processo cliente para extrair chaves de sessão ou injetar comandos via ptrace.
  • Permissões de Arquivo: O cliente SSH impõe uma regra rigorosa: se o arquivo de chave privada (~/.ssh/id_rsa) tiver permissões de leitura para outros usuários (chmod 644), o cliente recusará a execução da conexão, exigindo que as permissões sejam restritas apenas ao dono (chmod 600).
  • Agent Forwarding: O ForwardAgent yes permite que o servidor remoto use seu ssh-agent local para conexões subsequentes. Isso é conveniente mas perigoso: um administrador malicioso do servidor remoto pode usar seu agente para se conectar a outros hosts como você.

Hardening Recomendado

# Permissoes corretas dos arquivos de configuracao
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/known_hosts

# Desabilitar agent forwarding (nao colocar no config)
# ForwardAgent no  (ja e o default)

9. Conclusão

O cliente SSH executado pelo usuário é a ponte interativa entre o operador humano e a infraestrutura remota segura. Sua natureza efêmera, executada em espaço de usuário com permissões restritas, combinada com a flexibilidade do ~/.ssh/config, faz dele uma das ferramentas mais utilizadas por administradores de sistemas, desenvolvedores e profissionais de Cyber Security. Compreender suas opções, ciclo de vida e os riscos de segurança associados (em especial o port forwarding e o agent forwarding) é fundamental para operar ambientes de produção com segurança e eficiência.