GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo reenviar ssh con AllowTcpForwarding establecido en no?

Siempre que se pueda ejecutar socat localmente y en gateway (o incluso solo bash y cat el gateway , ¡vea el último ejemplo!) y se le permite no use un pty para estar limpio en 8 bits, es posible establecer un túnel a través de ssh. Aquí hay 4 ejemplos, mejorando el anterior:

Ejemplo básico trabajando una vez

(Tenerlo bifurcado requeriría una conexión ssh por túnel, no es bueno). Tener que escapar del : para que socat acepte el comando exec:

término1:

$ socat tcp-listen:12345,reuseaddr exec:'ssh [email protected] exec socat - tcp\:devbox\:22',nofork

término2:

$ ssh -p 12345 [email protected]

término1:

[email protected]'s password:

término2:

[email protected]'s password: 

Invertir la primera y la segunda dirección hace que el socket esté disponible de inmediato

socat tiene que permanecer a cargo, así que no nofork :

término1:

    $ socat exec:'ssh [email protected] exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
    [email protected]'s password:

término2:

    $ ssh -p 12345 [email protected]
    [email protected]'s password:

Usando un ControlMaster ssh

permite bifurcarse usando solo una única conexión ssh a la puerta de enlace, dando así un comportamiento similar al reenvío de puertos habitual:

término1:

    $ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
    [email protected]'s password:

término2:

    $ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket [email protected] exec socat - tcp\:devbox\:22'

término3:

    $ ssh -p 12345 [email protected]
    [email protected]'s password:

Tener solo bash y cat disponible en gateway

Usando bash redirección tcp integrada y dos semidúplex cat comandos (para un resultado full-duplex) uno ni siquiera necesita un socat remoto o netcat . El manejo de múltiples capas de comillas anidadas y escapadas fue un poco incómodo y tal vez se pueda hacer mejor o simplificar mediante el uso de un bash remoto. guion. Se debe tener cuidado de tener el cat bifurcado solo para salida:

term1 (sin cambios):

$ ssh -N -o ControlMaster=yes -o ControlPath=~/mysshcontrolsocket [email protected]
[email protected]'s password:

término2:

$ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket [email protected] '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'

término3:

$ ssh -p 12345 [email protected]
[email protected]'s password:

Reemplace ProxyJump con Bash

¡La idea anterior es buena! Esta es mi versión genérica de ssh_config cuando ProxyJump no funciona porque AllowTcpForwarding establecido en no y mi shell predeterminado es BASH:

ProxyCommand=ssh -T [email protected] "exec 3<>/dev/tcp/%h/%p 2<&- ; cat <&3 & cat >&3 ; kill $!"
  • -T Deshabilitar asignación de pseudo-terminal
  • ejecutivo No se creará ningún proceso nuevo (bash)
  • 3<> es simplemente una redirección a un descriptor de archivo disponible
  • /dev/tcp/... le pedirá a bash que abra el socket TCP correspondiente.
  • %h y %p será evaluado por su cliente OpenSSH como devbox y 22
  • 2<&- cerrará STDERR (también puede redirigirlo a /dev/null)
  • gato <&3 & leerá el descriptor de archivo seleccionado 3 en segundo plano
  • gato>&3 escribirá nuestro descriptor de archivo en primer plano
  • matar a $! matará al "gato lector" gato comando ejecutándose en segundo plano cuando cierra/interrumpe la conexión. De lo contrario, seguiría funcionando.

Podría reemplazar ProxyJump para mí en situaciones en las que estaba deshabilitado en el servidor de salto, pero realmente no quería reenviar mi clave privada allí o ingresar contraseñas sin un nivel adicional de cifrado. Usar otros SSH_AUTH_SOCK como raíz o grabar sesiones de terminal completamente con pulsaciones de teclas son cosas reales.

Pero, por favor, ¡asegúrate siempre de no infringir ninguna política que se aplique a ti!


Linux
  1. SSH a un puerto distinto del 22:cómo hacerlo (con ejemplos)

  2. Cómo configurar claves SSH

  3. Cómo configurar el reenvío web

  4. Cómo configurar claves SSH en Ubuntu 18.04

  5. Cómo configurar claves SSH en Debian

Cómo transferir archivos con Rsync a través de SSH

Cómo configurar el reenvío de puertos dinámicos SSH en Linux

Cómo configurar el reenvío de correo electrónico en cPanel

Cómo configurar un cortafuegos con GUFW en Linux

Cómo configurar SSH en CentOS y RHEL

Cómo proteger SSH con Fail2Ban