Túnel SSH (Port Forward) vs SSH ProxyJump, qual devo usar neste caso específico, Me -> JumpSever -> TargetServer

Túnel SSH (Port Forward) vs SSH ProxyJump, qual devo usar neste caso específico, Me -> JumpSever -> TargetServer

Sou novo no SSH Tunnel, li owikilivro do OpenSSH Proxyrepetidamente, ainda tão confuso.

o objetivo é construir um proxy duplo apenas com túneis SSH (encaminhamento de porta) ou ProxyJump (não tenho certeza de como devo chamá-los)

Por exemplo, me 192.168.1.1-->connect to--> the Jump ServerA 1.1.1.1, então eu realmente alcançarei the Target ServerB 2.2.2.2, se eu configurar um proxy Socks5 com ServerA 1.1.1.1, eventualmente serei procurado porServerB's IP 2.2.2.2

Eu sei como lidar comme >-para-> Server A, Mas não sei como lidar comServer A >-para-> Server B, (quer dizer, tenho todo o acesso e privilégios de root desses servidores, mas não sei como configurar.)

Eu aprendo muito devagar, qualquer ideia seria muito apreciada,

(Não me importaria se você deseja postar um comando ou abordagem exata para este exemplo. Isso ajudará muito)

Responder1

Basicamente os requisitos são:

  • O ServerB precisa ser acessível apenas pelo ServerA. Você não se conecta diretamente a ele.
  • O ServerA precisa ter o encapsulamento TCP habilitado.
  • ServerA precisa ser acessível por você.

Você configura a conexão com o ServerB por meio de um jumphost (in .ssh/config):

Host ServerB
    ProxyJump ServerA

Isso pressupõe que se você inserir ssh ServerA, você terminará no ServidorA, e se você, enquanto estiver no ServidorA, inserir ssh ServerB, você terminará no ServidorB. Por exemplo, o nome "ServidorB" deve ser resolvido no ServidorA, mas não se importará se for resolvido do seu lado. Podem ser nomes de host ou "slugs" (apelidos). Neste último caso, você associa seus nomes de host ou endereços IP novamente em .ssh/config:

Host ServerA
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

Você também pode especificar qual nome de usuário usar para host proxy:

Host ServerA
    User proxyuser
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

Depois disso, você entra ssh ServerB. O OpenSSH se conecta ao ServerA e usa alguma porta aleatória para encaminhar através desta conexão para o endereço do ServerB, porta 22. Esta conexão é bifurcada em segundo plano; O OpenSSH se conecta imediatamente a essa porta encaminhada aleatoriamente (para localhost, mas ele realmente verifica sua chave no .ssh/known_hostsnome "ServerB" e no endereço IP especificado em HostName, se houver), então você terminará diretamente no ServerB. Se você emitir "who", dirá que você está conectado a partir do endereço ServerA. Qualquer pessoa sentada entre você e o ServerA não tem como saber que você está realmente conversando com o ServerB.

Você pode usar qualquer opção de linha de comando SSH, elas serão usadas paraServidorBconexão (feita através da porta encaminhada). Por exemplo, se você usar ssh -D 12345 user@ServerB, ele se conectará ao ServidorA como usuário proxy com a porta encaminhada para o ServidorB:22, depois se conectará a essa porta e se autenticará no ServidorB como usuário, e instalará o proxy SOCKS5 na porta 12345. O endereço de saída para esse SOCKS5 seria ServidorB, por exemplo, se você usar esse proxy (por exemplo, em um navegador), as partes remotas verão que você está se conectando a partir do endereço do ServidorB.

Você pode empilhar mais jumphosts, também funcionará:

Host ServerB
    ProxyJump ServerA

Host ServerC
    ProxyJump ServerC

e ssh ServerCprimeiro se conectará ao ServerA com encaminhamento de porta para ServerB: 22, então ele se conectará através desse encaminhamento para ServerB com outro encaminhamento de porta para ServerC e, em seguida, conectar-se-á a essa outra porta e você terminará com o shell ServerC.

Observe que será solicitada uma senha paracadaconexão. Isso é bastante complicado. É melhor configurar e usar a autenticação baseada em chave ssh-agent.

informação relacionada