mantenga la conexión ssh viva y persistente mientras cambia las conexiones de la interfaz de red

13

Guión:

  1. En mi escritorio con la computadora portátil conectada a Ethernet y conectada al servidor remoto a través de SSH
  2. Desea mudarse al otro lado de la oficina con una computadora portátil y cambiar a WiFi sin interrumpir la conexión SSH

He intentado: conectarme a WiFi primero y luego desconectar ethernet; y también desconectando Ethernet primero y luego conectándose a WiFi. Ninguno de los enfoques funciona. También lo probé al usar servidores Ubuntu y OS X junto con ambas opciones de sistema operativo también para el cliente. Sin suerte.

Parece que necesito alguna forma de decirle a mi conexión SSH que debería comenzar a usar la interfaz de red recién conectada en lugar de la antigua interfaz desconectada. ¿Algunas ideas?

Me doy cuenta de que podría permanecer con WiFi todo el día, pero no quiero hacerlo. También me doy cuenta de que puedo trabajar desde una sesión de pantalla en el servidor remoto y luego volver a conectarme a esa sesión de pantalla después de cambiar las interfaces, pero tampoco quiero hacerlo. Por ejemplo, podría estar canalizando algún comando grande como un volcado de la base de datos sobre SSH o podría tener archivos abiertos a través de SSHFS, o podría simplemente querer evitar la molestia de volver a conectar

Sean
fuente
3
Si obtiene la misma dirección IP en ambos sentidos, entonces esto debería funcionar. Si no, es prácticamente imposible.
Alan Curry
@AlanCurry Si tanto el cliente como el servidor admiten MPTCP, entonces es posible. Pero el soporte de MPTCP todavía es muy limitado, por lo que es poco probable que sea así.
kasperd el

Respuestas:

4

Sospecho que esta solución no funcionará para SSHFS, etc., pero podría echar un vistazo a Mosh, que proporciona soporte de roaming al menos para el propio shell.

Grisha Levit
fuente
Esto parece una muy buena solución, pero desafortunadamente también debe instalarse en el servidor, lo que no siempre es posible debido a los permisos.
user000001
4

Me temo que no puedes hacer esto, por definición. Una sesión SSH se ejecuta a través de una conexión TCP, que se define por las cuatro tuplas (dirección de origen, puerto de origen, dirección de destino, puerto de destino). No puede cambiar la conexión existente a una dirección diferente en el cliente (aparte del hecho de que el sistema operativo cortará la conexión cuando la interfaz se caiga).

NAT puede complicar esta imagen, pero no de ninguna manera que pueda ayudarlo.

Richard E. Silverman
fuente
Sí, pero la aplicación puede volver a conectarse una vez que sabe que el socket se ha cerrado. ¿El protocolo SSH tiene una disposición para reanudar una sesión anterior?
Ajay Brahmakshatriya
@AjayBrahmakshatriya SSH no tiene herramientas para reanudar las sesiones
Ferrybig
2

Hilo antiguo, lo sé, pero en aras de la integridad ya que estaba buscando lo mismo ...

En Windows 7 o posterior, simplemente debería poder seleccionar tanto su adaptador wifi como su adaptador Ethernet y elegir "Conexión de puente". Esto le dará una única dirección IP para ambos, y ahora podrá desconectar y volver a conectar Ethernet a voluntad (dada la cobertura wifi continua).

Torio
fuente
Buena idea, tendré que probar esto.
Doug
Si hace esto, no puede hacerlo en ambas redes a la vez, dependiendo de la configuración, patea a todos en el área de la red (fuente: esto me pasó a mí)
Ferrybig
2

Lo manejo de dos maneras:

Inicie la sesión desde un servidor de terminal en su centro de datos (RDP / Windows / etc.)

O

Instale la GNU o e después de iniciar sesión.

Prefiero tmuxporque screenes bastante vieja escuela, pero si solo se te permite instalar paquetes compatibles, screenestá en el repositorio de RHEL.

O

Haz ambos.

Doug
fuente
tmuxEs muy útil. Ejecutar cosas remotas dentro tmuxes un excelente hábito para entrar.
pollitos
Sí estoy de acuerdo. La función de múltiples ventanas es excelente.
Doug
1

No se puede hacer fácilmente.

Puedo señalarle una serie de aplicaciones muy costosas que le permiten mantener una sesión telnet o SSH cuando se mueve entre IP o AP, o incluso por períodos de desconexión de red por períodos prolongados, pero básicamente lo logran creando un servidor siempre abierto de sesión secundaria para la máquina del cliente para que el servidor no sepa que la conexión es diferente o se ha caído.

Supongo que podría codificar tal cosa, pero imagino que si fuera fácil de hacer, mis clientes no serían violados con costos de 5 cifras por mantener sus conexiones de terminal abiertas en escáneres inalámbricos de mano.

Sin embargo, tropecé con la pantalla, que dice crear sesiones SSH persistentes , que en realidad pueden funcionar ... inténtalo.

HopelessN00b
fuente
1

El problema es probablemente que su dirección IP de origen cambia cuando cambia entre cableada y wifi. Esto evitará que vuelvan las sesiones ssh.

Manejé esto en Linux conectándome a través de un VPN y asegurándome de que la conexión VPN siempre le dé la misma IP a su cuenta (no es difícil de aplicar, pero existe una gran posibilidad de que reciba la misma IP por VPN de todos modos si es disponible, pero mejor hacerla cumplir para estar seguro). Principalmente uso vtun, pero openvpn también está bien. Asegúrese de que sus conexiones pasen por el VPN (enrutamiento correcto, prefijos insertados, ...)

He podido estar desconectado del cable incluso durante 5 minutos y luego conectarme a wifi y seguir conectado a todas mis sesiones ssh. Ping en curso, mtr, htop, ... simplemente continúe cuando se restablezca el vpn como si nada hubiera pasado.

multia
fuente
0

Intente estar solo en wifi cuando inicie la sesión ssh por primera vez. Luego, conecte su ethernet. Eso debería permitir que las nuevas conexiones pasen por el ethernet, pero la conexión establecida permanecerá en wifi. Al menos lo he visto funcionar así con OSX, por lo que el sistema operativo / hardware puede variar.

cada vez más sabio
fuente
0

Estoy bastante seguro de que puede hacer esto con una cantidad tonta de pirateo con VM y Tunneling.

Esto no se ha probado, pero avíseme si realmente funciona.

  1. Cree una máquina virtual invitada que tenga 2 interfaces, 1 adaptador puenteado (para wifi) y 1 red de solo host
  2. Digamos que la VM tiene 192.168.0.25 para el adaptador en puente a la esposa y 192.168.56.5 solo para el host.
  3. Dentro de vm, cree la conexión ssh con un túnel al puerto del lado remoto 22 ssh -L 10022:remote.server.example.com:22
  4. Ahora conéctate a través del túnel. ssh 192.168.56.3 -p 10022
  5. Cuando pierda su conexión wifi, cambie el adaptador en la VM al adaptador de red ether.
  6. Esperemos que no estropee ni arruine la tabla de enrutamiento

Déjame saber si funciona.

Mike Graf
fuente