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 example@unixlinux.online exec socat - tcp\:devbox\:22',nofork
término2:
$ ssh -p 12345 example@unixlinux.online
término1:
example@unixlinux.online's password:
término2:
example@unixlinux.online'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 example@unixlinux.online exec socat - tcp\:devbox\:22' tcp-listen:12345,reuseaddr
example@unixlinux.online's password:
término2:
$ ssh -p 12345 example@unixlinux.online
example@unixlinux.online'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 example@unixlinux.online
example@unixlinux.online's password:
término2:
$ socat tcp-listen:12345,reuseaddr,fork exec:'ssh -o ControlPath=~/mysshcontrolsocket example@unixlinux.online exec socat - tcp\:devbox\:22'
término3:
$ ssh -p 12345 example@unixlinux.online
example@unixlinux.online'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 example@unixlinux.online
example@unixlinux.online's password:
término2:
$ socat tcp-listen:12345,reuseaddr,fork 'exec:ssh -T -o ControlPath=~/mysshcontrolsocket example@unixlinux.online '\''exec bash -c \'\''"exec 2>/dev/null 8<>/dev/tcp/devbox/22; cat <&8 & cat >&8"\'\'\'
término3:
$ ssh -p 12345 example@unixlinux.online
example@unixlinux.online'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 example@unixlinux.online "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!