youatwork@officepc$ autossh -R 12345:localhost:22 notroot@serverpc
Más tarde:
you@homepc$ autossh -L 23456:localhost:12345 notroot@serverpc
you@homepc$ ssh youatwork@localhost -p 23456
Lo que podría hacer es esto: en el paso 1, reenvíe un puerto remoto desde la PC de la oficina al servidor ( 12345
se usa como ejemplo, cualquier puerto> 1024 debería hacerlo). Ahora, conectarse a 12345 en el servidor debería conectarlo al puerto 22 en officepc.
En el paso 2, reenvíe el puerto 23456 desde su máquina doméstica a 12345 en el servidor (desde donde se reenvía a officepc: 22, como se configuró en el paso 1)
En el paso 3, se conecta al puerto local 23456 con el inicio de sesión de la PC de su oficina . Esto se reenvía en el paso 2 al puerto 12345 en su servidor y en el paso 1 a la PC de su oficina.
Tenga en cuenta que estoy usando autossh para los reenvíos, ya que es un contenedor ssh que vuelve a conectar automáticamente el túnel si se desconecta; sin embargo, ssh normal también funcionaría, siempre que la conexión no se caiga.
Existe una posible vulnerabilidad: cualquiera que pueda conectarse a localhost: 12345 en serverpc ahora puede conectarse a officepc: 22 e intentar hackearlo. (Tenga en cuenta que si está ejecutando un servidor SSH, de todos modos debe asegurarlo por encima de las protecciones básicas que están activadas de manera predeterminada; recomiendo al menos deshabilitar el inicio de sesión de root y deshabilitar la autenticación de contraseña; consulte, por ejemplo, esto )
Editar : He verificado esto con la misma configuración, y funciona. GatewayPorts no
solo afecta a los puertos abiertos al mundo en general, no a los túneles locales. Esto es lo que son los puertos reenviados:
homepc:
outgoing ssh to serverpc:22
listening localhost:23456 forwarded through ssh tunnel
serverpc:
listening ssh at *:22
incoming localhost ssh tunnel (from homepc) forwarded to localhost:12345
listening localhost ssh tunnel (from officepc) forwarded from localhost:12345
officepc:
outgoing ssh to serverpc:22
incoming localhost through ssh tunnel (from serverpc) forwarded to localhost:22
Entonces, en lo que respecta a la pila de red, es todo el tráfico local en las respectivas interfaces de bucle invertido (más conexiones ssh a serverpc); por lo tanto, GatewayPorts
no está marcado en absoluto.
Sin embargo, existe la directiva AllowTcpForwarding
: si es así no
, esta configuración fallará ya que no se permite ningún reenvío, ni siquiera a través de la interfaz de bucle invertido.
Advertencias :
si usa autossh y ssh reciente, es posible que desee usar ssh ServerAliveInterval
y ServerAliveCountMax
para mantener el túnel en funcionamiento. Autossh tiene un control incorporado, pero aparentemente tiene algunos problemas en Fedora. -M0
deshabilita eso y -oServerAliveInterval=20 -oServerAliveCountMax=3
comprueba si la conexión está activa : prueba cada 20 segundos, si falla 3 veces seguidas, detiene ssh (y autossh crea una nueva):
autossh -M0 -R 12345:localhost:22 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
autossh -M0 -L 23456:localhost:12345 -oServerAliveInterval=20 -oServerAliveCountMax=3 notroot@serverpc
puede ser útil reiniciar el túnel ssh si falla el reenvío, utilizando -oExitOnForwardFailure=yes
: si el puerto ya está vinculado, puede obtener una conexión SSH que funcione, pero no un túnel reenviado.
~/.ssh/config
es aconsejable usar para las opciones (y puertos), de lo contrario las líneas de comando se vuelven demasiado detalladas. Por ejemplo:
Host fwdserverpc
Hostname serverpc
User notroot
ServerAliveInterval 20
ServerAliveCountMax 3
ExitOnForwardFailure yes
LocalForward 23456 localhost:12345
Entonces puede usar solo el alias del servidor:
autossh -M0 fwdserverpc