SSH Tunnel(Port Forward) vs SSH ProxyJump, cuál debo usar en este caso específico, Yo -> JumpSever -> TargetServer

SSH Tunnel(Port Forward) vs SSH ProxyJump, cuál debo usar en este caso específico, Yo -> JumpSever -> TargetServer

Soy nuevo en SSH Tunnel, he leído elwikilibro de OpenSSH Proxyuna y otra vez, todavía tan confundido.

el objetivo es construir un proxy doble con solo túneles SSH (reenvío de puertos) o ProxyJump (no estoy seguro de cómo debería llamarlos)

Por ejemplo, me 192.168.1.1-->conectar a--> the Jump ServerA 1.1.1.1, entonces realmente alcanzaré the Target ServerB 2.2.2.2, si configuro un proxy calcetines5 con ServerA 1.1.1.1, eventualmente obtendré un proxy medianteServerB's IP 2.2.2.2

sé cómo lidiar conme >-a-> Server A, Pero no sé cómo lidiar conServer A >-a-> Server B, (Quiero decir, tengo todo el acceso y privilegios de root de estos servidores, pero no sé cómo configurarlos).

Aprendo muy lentamente, cualquier idea sería muy apreciada.

(No me importaría si desea publicar un comando o enfoque exacto para este ejemplo. Eso será de gran ayuda)

Respuesta1

Básicamente los requisitos son:

  • Solo se debe poder acceder al servidor B desde el servidor A. No te conectas a él directamente.
  • El servidor A debe tener habilitado el túnel TCP.
  • Usted debe poder acceder al servidor A.

Configura la conexión al ServidorB a través de un jumphost (en .ssh/config):

Host ServerB
    ProxyJump ServerA

Esto supone que si ingresas ssh ServerA, terminarás en el ServidorA, y si, mientras estás en el ServidorA, ingresas ssh ServerB, terminarás en el ServidorB. Por ejemplo, el nombre "ServidorB" debería poder resolverse en el ServidorA, pero no le importará si se puede resolver de su lado. Podrían ser nombres de host o "slugs" (apodos). En este último caso, vuelve a asociar sus nombres de host o direcciones IP en .ssh/config:

Host ServerA
    HostName ip.add.re.ss

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

También puede especificar qué nombre de usuario usar para el host proxy:

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

Host ServerB
    ProxyJump ServerA
    HostName host.na.me

Después de eso, ingresas ssh ServerB. OpenSSH se conecta al ServidorA y utiliza algún puerto aleatorio para reenviar a través de esta conexión a la dirección del ServidorB, puerto 22. Esta conexión se bifurca en segundo plano; OpenSSH se conecta inmediatamente a este puerto de reenvío aleatorio (a localhost, pero en realidad verifica su clave con .ssh/known_hostsel nombre "ServidorB" y la dirección IP especificada en Nombre de Host, si corresponde), por lo que terminará directamente en el ServidorB. Si escribe "quién", dirá que está conectado desde la dirección del Servidor A. Cualquiera que esté sentado entre usted y el ServidorA no tiene forma posible de saber que realmente está hablando con el ServidorB.

Puede usar cualquier opción de línea de comando SSH, esas se usarán paraServidorBconexión (realizada a través del puerto reenviado). Por ejemplo, si usa ssh -D 12345 user@ServerB, se conectará al ServidorA como usuario proxy con el puerto reenviado al ServidorB:22, luego se conectará a ese puerto y se autenticará en el ServidorB como usuario, e instalará el proxy SOCKS5 en el puerto 12345. La dirección de salida para ese SOCKS5 sería ServidorB, por ejemplo, si usa ese proxy (por ejemplo, en un navegador), las partes remotas verán que se está conectando desde la dirección del ServidorB.

Puedes apilar más jumphosts, también funcionará:

Host ServerB
    ProxyJump ServerA

Host ServerC
    ProxyJump ServerC

y ssh ServerCprimero se conectará al ServidorA con el reenvío de puerto al ServidorB:22, luego se conectará a través de ese reenvío al ServidorB con otro puerto que reenvía al ServidorC, y luego se conectará a ese otro puerto y terminará con el shell del ServidorC.

Tenga en cuenta que se le pedirá una contraseña paracadaconexión. Esto es bastante engorroso. Es mejor tener configurada y utilizada la autenticación basada en claves ssh-agent.

información relacionada