No modelo cliente-servidor do SSH, a responsabilidade de iniciar qualquer interação recai exclusivamente sobre o Cliente SSH. O envio de requisições de conexão é o estágio inicial e ativo do protocolo, onde o cliente localiza o servidor remoto e propõe o estabelecimento de um túnel seguro. Sem esta ação proativa do componente cliente, o servidor permaneceria em estado de espera (listening) indefinidamente.
1. A Natureza da Requisição de Conexão
Diferente de protocolos baseados em broadcast, o SSH exige que o cliente conheça o endereço de destino (IP ou FQDN) e a porta de serviço (padrão 22). A requisição de conexão não é um único pacote, mas uma sequência lógica de eventos que começa na camada de transporte e sobe para a camada de aplicação.
-
O Gatilho: O usuário ou um script executa o binário cliente (ex:
ssh usuario@servidor). -
O Socket: O sistema operacional do cliente abre um socket local e tenta estabelecer uma conexão TCP com o IP e porta alvo.
2. O Handshake de Versão (Version Exchange)
Assim que a conexão TCP é estabelecida, a primeira “requisição” real do protocolo SSH é o envio de uma string de identificação.
-
O cliente envia uma linha de texto no formato:
SSH-protoversion-softwareversion comments. -
Objetivo: Informar ao servidor quais capacidades o cliente possui. Se o cliente enviar uma requisição para SSH-1.5 e o servidor for configurado para aceitar apenas SSH-2.0, a conexão é encerrada imediatamente antes mesmo de qualquer criptografia ser discutida.
3. Negociação de Algoritmos (KEXINIT)
Após a troca de versões, o cliente envia uma requisição contendo uma lista de algoritmos preferenciais. Este pacote, conhecido como KEXINIT, detalha o que o cliente “deseja” usar para:
-
Troca de chaves (Key Exchange).
-
Cifras de criptografia simétrica.
-
Algoritmos de integridade (MAC).
-
Métodos de compressão.
O cliente sempre envia suas opções em ordem de prioridade (do mais seguro/eficiente para o menos). O servidor compara esta lista com a sua própria e seleciona a primeira correspondência mútua.
4. Requisição de Autenticação
Uma vez que o túnel cifrado básico foi estabelecido através da troca de chaves, o cliente envia a requisição de autenticação de usuário.
-
Método de Senha: O cliente solicita ao usuário a credencial e a envia cifrada.
-
Método de Chave Pública: O cliente envia uma requisição contendo sua chave pública e uma assinatura digital que prova a posse da chave privada correspondente.
-
Agente SSH: O cliente pode requisitar a conexão utilizando chaves armazenadas em um
ssh-agentna memória, evitando que o usuário precise digitar senhas repetidamente.
5. Requisição de Canais e Serviços
Após a autenticação ser aceita, o cliente ainda precisa requisitar o que ele quer fazer no servidor. O SSH permite múltiplos canais dentro de uma única conexão:
-
Session Channel: Requisição de um shell interativo (o uso mais comum).
-
Exec Channel: Requisição para executar um comando único e sair (ex:
ssh user@host "uptime"). -
Subsystem Channel: Requisição para iniciar um subsistema específico, como o SFTP.
-
Forwarding Request: Requisição para encaminhar portas locais para o servidor (Túnel SSH).
6. Tratamento de Timeouts e Erros
Durante o envio de requisições, o cliente monitora o tempo de resposta. Se o servidor não responder a uma requisição de conexão dentro do período de timeout, o cliente encerra o processo para evitar o consumo desnecessário de recursos locais. Erros comuns nesta fase incluem Connection Refused (porta fechada) ou No route to host (problemas de rede ou firewall).