Qual variante do ssh “jump host” devo usar?

3

Existem pelo menos três variantes de ssh config conhecidas que permitem que o uso de jump_host se conecte 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 é melhor do que os outros? Qual a diferença (se houver alguma) entre config 2 e 3? Obviamente, a configuração 1 precisa ter netcat à mão, então é menos atraente.

    
por NarūnasK 30.12.2017 / 22:36

1 resposta

3

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 Varient 1 simplesmente netcat %h %p e usar os parâmetros do Host para realizar a mesma coisa que você quer do seu comando ssh.

Host target_host
  HostName 172.16.0.1
  LogLevel QUIET
  ForwardX11 no
  ProxyCommand netcat %h %p

No entanto, mesmo com isso, seria necessário um suporte para netcat e um processo extra como parte da conexão.

A variante 2 faz a mesma coisa que 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 envio de agente como o jumphost.

As Variantes 1 e 2 estão usando o ProxyCommand, que está lá como uma maneira genérica de automatizar a configuração da conexão. Principalmente essas variantes existem porque o ProxyJump só existia 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 ProxyJump, que é essencialmente um proxy TCP integrado e é mais semelhante à Variant 2, mas permite uma manufatura de encadeamento mais simples e mais rigorosa. Sem fazer o mesmo, ficaria assim:

Host jumphost2
  ProxyCommand ssh -W %h:%p jumphost1
Host server
  ProxyCommand ssh -W %h:%p jumphost2

Mas com o ProxyJump ficaria assim:

Host server
  ProxyJump jumphost2,jumphost1
    
por 31.12.2017 / 01:59

Tags