Existem pelo menos 3 variantes de ssh
configuração conhecidas por mim que permitem jump_host
o uso para se conectar ao target_host
:
Host jump_host
HostName 1.2.3.4
# Variant - 1
Host target_host
HostName 172.16.0.1
ProxyCommand ssh -q -x jump_host 'netcat %h 22'
# Variant - 2
Host target_host
HostName 172.16.0.1
ProxyCommand ssh -q -x jump_host -W '%h:22'
# Variant - 3
Host target_host
HostName 172.16.0.1
ProxyJump jump_host
Algum desses métodos é de alguma forma melhor que os outros? Qual é a diferença (se houver) entre as configurações 2 e 3? Obviamente, a configuração 1 requer ter netcat
em mãos, por isso é menos atraente.
A variante 1 será autenticada duas vezes. Uma vez com o comando proxy para estabelecer a conexão e novamente com o comando ssh original. Você também pode fazer a Variante 1 simplesmente
netcat %h %p
e usar os parâmetros do Host para realizar a mesma coisa que deseja do seu comando ssh.No entanto, mesmo com isso, seria necessário um pty para suportar o netcat e um processo extra como parte da conexão.
A variante 2 faz a mesma coisa que o netcat, mas internamente e não aloca um pty, embora isso possa ser substituído para ser exatamente como a variante 1, se desejado. Também evita qualquer configuração no jumphost como encaminhamento de agente.
As variantes 1 e 2 estão usando o ProxyCommand, que existe como uma maneira genérica de automatizar a configuração da conexão. Principalmente essas variantes existem porque o ProxyJump só existiu depois dele. Mas o ProxyCommand pode ser usado para fazer coisas mais avançadas com a configuração da conexão. A documentação cita exemplos de como usá-lo para configurar proxies HTTP CONNECT para encaminhar sua conexão.
A Variante 3 usa o ProxyJump, que é essencialmente um proxy TCP integrado e é mais semelhante à Variante 2, mas permite um encadeamento mais simples e estrito. Sem ele fazendo a mesma coisa ficaria assim:
Mas com o ProxyJump ficaria assim: