02 - Executado pelo Usuário
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_rsae 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:
- Início: O processo nasce quando a conexão é solicitada. O cliente lê
~/.ssh/confige~/.ssh/known_hosts. - Negociação de Versão: Cliente e servidor trocam strings de identificação (
SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.4). - Negociação de Algoritmos: São escolhidos algoritmos de cifragem, MAC, key exchange e compressão.
- Key Exchange (KEX): Estabelecida a chave simétrica de sessão (Diffie-Hellman, ECDH, Curve25519).
- Autenticação de Usuário: Cliente prova sua identidade (senha, chave pública, Kerberos, GSSAPI).
- Manutenção: O processo permanece ativo enquanto o túnel estiver aberto, mantendo os descritores de arquivo (stdin, stdout, stderr) conectados ao servidor remoto.
- 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 viaServerAliveInterval.
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 yespermite que o servidor remoto use seussh-agentlocal 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.