mantenha a conexão ssh viva e persistente ao alternar as conexões da interface de rede

13

Cenário:

  1. Na minha mesa com o laptop conectado à ethernet e conectado ao servidor remoto via SSH
  2. Deseja mudar para o outro lado do escritório com o laptop e mudar para WiFi sem interromper a conexão SSH

Eu tentei: conectar primeiro ao WiFi e depois desconectar a Ethernet; e também desconectar a Ethernet primeiro e depois conectar ao WiFi. Nenhuma abordagem funciona. Também tentei ao usar servidores Ubuntu e OS X, juntamente com as duas opções de SO, bem como para o cliente. Sem sorte

Parece que preciso de alguma maneira de informar à minha conexão SSH que ela deve começar a usar a interface de rede recém-conectada, em vez da antiga interface desconectada. Alguma ideia?

Percebo que eu poderia ficar no Wi-Fi o dia inteiro, mas não quero fazer isso. Também percebo que posso trabalhar de dentro de uma sessão de tela no servidor remoto e reconectar-me a essa sessão de tela após alterar as interfaces, mas também não quero fazer isso. Por exemplo, eu posso estar executando algum comando grande, como um despejo de banco de dados sobre SSH, ou posso ter arquivos abertos por SSHFS, ou posso apenas evitar o incômodo de reconectar-me

Sean
fonte
3
Se você obtiver o mesmo endereço IP nos dois sentidos, isso deve funcionar. Caso contrário, é praticamente impossível.
22812 Alan
@AlanCurry Se o cliente e o servidor suportam MPTCP, é possível. Mas o suporte ao MPTCP ainda é muito limitado, por isso é improvável que seja esse o caso.
kasperd

Respostas:

4

Eu suspeito que esta solução não funcione para SSHFS, etc, mas você pode dar uma olhada no Mosh, que fornece suporte de roaming para pelo menos o próprio shell.

Grisha Levit
fonte
Parece uma solução muito boa, mas infelizmente também precisa ser instalada no servidor, o que nem sempre é possível devido às permissões.
user000001
4

Receio que você não possa fazer isso, por definição. Uma sessão SSH é executada em uma conexão TCP, definida pelas quatro tuplas (endereço de origem, porta de origem, endereço de destino, porta de destino). Você não pode mudar a conexão existente para um endereço diferente no cliente (além do fato de que o sistema operacional interromperá a conexão quando a interface for desativada).

O NAT pode complicar essa imagem, mas não de forma alguma que o ajude.

Richard E. Silverman
fonte
Sim, mas o aplicativo pode reconectar-se quando souber que o soquete foi fechado. O protocolo SSH tem uma disposição para retomar uma sessão antiga?
Ajay Brahmakshatriya
@AjayBrahmakshatriya SSH não tem ferramentas para sessões de currículo
Ferrybig
2

Fio velho, eu sei, mas por uma questão de completude, já que eu estava procurando a mesma coisa ...

No Windows 7 ou mais recente, você deve simplesmente selecionar o adaptador wifi e o adaptador Ethernet e escolher "Bridge Connection". Isso fornecerá um único endereço IP para ambos, e agora você poderá desconectar e reconectar a Ethernet à vontade (com a cobertura Wi-Fi contínua).

Tório
fonte
Boa ideia, vou ter que tentar isso.
Doug
Se fazer isso, não pode deixar a ambas as redes de uma só vez, dependendo da configuração, ele chuta todos na área da rede (fonte: isso aconteceu comigo)
Ferrybig
2

Eu gerencio isso de duas maneiras:

Inicie a sessão a partir de um servidor de terminal no seu datacenter (RDP / Windows / etc)

OU

Instale a GNU ou e inicie-os após o login.

Eu prefiro tmuxporque screené bastante antigo, mas se você tem permissão para instalar apenas pacotes suportados, screenestá no repositório RHEL.

OU

Faz ambos.

Doug
fonte
tmuxé realmente útil. Executando coisas remotas dentro de tmuxé um excelente hábito de entrar.
chicks
Sim eu concordo. A função de múltiplas janelas é ótima.
Doug
1

Isso não pode ser feito facilmente.

Posso apontar vários aplicativos caros que permitem manter uma sessão Telnet ou SSH ao se mover entre IPs ou APs, ou mesmo por longos períodos de desconexão da rede, mas eles basicamente conseguem isso criando um servidor sempre aberto sessão do lado da máquina cliente para que o servidor não saiba que a conexão é diferente ou caiu.

Suponho que você possa codificar uma coisa dessas, mas imagino que, se fosse fácil, meus clientes não seriam estuprados com custos de cinco dígitos por manterem suas conexões de terminal abertas em scanners de mão sem fio.

No entanto, eu tropecei na tela, que afirma criar sessões SSH persistentes , que podem realmente funcionar ... experimente.

HopelessN00b
fonte
1

O problema provavelmente é que o endereço IP de origem é alterado quando você alterna entre cabeado e wifi. Isso impedirá que as sessões ssh voltem.

Eu lidei com isso no linux conectando-me através de uma vpn e certificando-me de que a conexão vpn sempre dê o mesmo ip à sua conta (não é difícil de aplicar, mas é grande a chance de você receber o mesmo ip sobre a vpn por padrão de qualquer maneira, se for disponível, mas melhor aplicá-lo para ter certeza). Eu uso principalmente o vtun, mas o openvpn também está ok. Verifique se suas conexões passam pela vpn (roteamento correto, prefixos enviados, ...)

Consegui ficar off-line a partir do cabo por até 5 minutos e, em seguida, conectar-me ao Wi-Fi e ainda poder permanecer conectado a todas as minhas sessões ssh. Ping, mtr, htop, ... continuam quando o vpn é restaurado como se nada tivesse acontecido.

multia
fonte
0

Tente usar apenas o wifi quando você iniciar a sessão ssh. Em seguida, conecte sua ethernet. Isso deve permitir que novas conexões passem pela ethernet, mas a conexão estabelecida permanecerá no wifi. Pelo menos eu já vi isso funcionar com o OSX, então o SO / hardware pode variar.

ficando mais sábio
fonte
0

Tenho certeza de que você pode fazer isso com uma quantidade absurda de hackers com VMs e tunelamento.

Isso não foi testado, mas deixe-me saber se realmente funciona.

  1. Crie uma VM convidada com 2 interfaces, 1 adaptador em ponte (para wifi) e 1 rede somente para host
  2. Digamos que a VM tenha 192.168.0.25 para o adaptador em ponte para a esposa e 192.168.56.5 apenas para o host.
  3. Dentro da vm, crie a conexão ssh com um túnel para a porta 22 do lado remoto ssh -L 10022:remote.server.example.com:22
  4. Agora conecte-se através do túnel. ssh 192.168.56.3 -p 10022
  5. Quando você perder sua conexão wifi, altere o adaptador na VM para o adaptador ether net.
  6. Espero que ele não faça hup ou estrague a tabela de roteamento

deixe-me saber se funciona.

Mike Graf
fonte