Um listener SOCKS local é útil em algumas redes e ausente em outras. O OpenSSH pode escolher um comando de proxy de forma condicional, sem tornar essa escolha válida para todos os hosts.

Para o OpenSSH com a forma OpenBSD do nc, uma configuração de cliente ilustrativa é:

Host work-server
    HostName ssh.example.net
    User alex

Match originalhost work-server exec "nc -z -w 1 127.0.0.1 1080"
    ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p

Match all

originalhost restringe a verificação ao nome fornecido na linha de comando do SSH. exec corresponde quando o respetivo comando termina com êxito. O Match all final encerra esse âmbito condicional para as definições seguintes.

Isto pressupõe que nenhuma definição anterior aplicável já tenha escolhido um comando de proxy ou uma rota de salto em conflito. O SSH costuma usar o primeiro valor obtido para uma opção, pelo que uma predefinição ampla no topo pode impedir que uma condição posterior produza o efeito esperado.

Um socket à escuta é uma promessa modesta

A sondagem verifica o acesso TCP a uma porta local. Não conclui a negociação SOCKS, não estabelece a ligação de destino pretendida nem prova que programa é dono dessa porta. O listener também pode desaparecer após a verificação.

O tempo limite mantém uma sondagem falhada dentro de limites. As opções mostradas pertencem à interface nc do OpenBSD; outros programas com o mesmo nome de ficheiro podem expor opções diferentes.

Quando a condição não corresponde, este exemplo deixa a ligação sem este ProxyCommand, permitindo a sua rota habitual. Isso só é adequado quando o acesso direto é permitido. Uma política de proxy obrigatória não deve usar uma verificação de disponibilidade como autorização para escapar para outra rota.

O nome de host SSH de destino e as verificações de chave de host continuam a identificar o servidor de destino. Escolher um auxiliar de transporte não é motivo para aceitar uma chave de host inesperada.

Artigos relacionados