Поддерживать соединение SSH живым и постоянным при переключении соединений сетевого интерфейса

Сценарий:

  1. На моем столе с ноутбуком подключен к Ethernet и подключен к удаленному серверу через SSH
  2. Хотите переехать на другую сторону офиса с ноутбуком и перейти на WiFi, не прерывая SSH-соединение

Я пробовал: сначала подключиться к WiFi, затем отключить Ethernet; а также сначала отключение Ethernet, затем подключение к WiFi. Ни один из подходов не работает. Также пробовал при использовании серверов Ubuntu и OS X вместе с обоими вариантами ОС, а также для клиента. Неудачно.

Похоже, мне нужен какой-то способ сообщить моему SSH-соединению, что оно должно начать использовать вновь подключенный сетевой интерфейс вместо старого отключенного интерфейса. Есть идеи?

Я понимаю, что могу просто оставаться на Wi-Fi целый день, но я не хочу этого делать. Я также понимаю, что могу просто работать в рамках сеанса экрана на удаленном сервере, а затем повторно подключаться к этому сеансу экрана после изменения интерфейсов, но я также не хочу этого делать. Например, я могу передать какую-то большую команду, например, дамп базы данных по SSH, или у меня могут быть файлы, открытые через SSHFS, или я просто хочу избежать неудобств повторного подключения

11 ответов

Решение

Я подозреваю, что это решение не будет работать для SSHFS и т. Д., Но вы можете взглянуть на Mosh, который обеспечивает поддержку роуминга по крайней мере для самой оболочки.

Боюсь, вы не можете сделать это по определению. Сеанс SSH выполняется через TCP-соединение, которое определяется четырьмя кортежами (адрес источника, порт источника, адрес назначения, порт назначения). Вы не можете перенести существующее соединение на другой адрес на клиенте (кроме того факта, что ОС разорвет соединение, когда интерфейс выйдет из строя).

NAT может усложнить эту картину, но никак не поможет вам.

Старый поток, я знаю, но ради полноты, так как я искал то же самое...

В Windows 7 или новее вы должны просто иметь возможность выбрать адаптер Wi-Fi и адаптер Ethernet и выбрать "Мостовое соединение". Это даст вам один IP-адрес для обоих, и теперь вы сможете отключать и повторно подключать Ethernet по желанию (при условии постоянного покрытия Wi-Fi).

Вы можете связать соединения Ethernat и Wifi.

Вот как я это делаю на RHEL:

# Run as sudo:
$ sudo -i

$ modprobe bonding

# To enable after reboot, add " bonding " to:
$ vi /etc/modules-load.d/bonding.conf

# Get your network interfaces IDs
$ nmcli device status | grep -E "wifi|eth"
  # enp0s31f6   ethernet  connected  
  # wlp58s0     wifi      connected  

# Add new connections
$ nmcli connection add type bond ifname bond0 con-name My-Connections-Bond
$ nmcli connection add type ethernet ifname enp0s31f6 master My-Connections-Bond con-name My-Eth-Connection
$ nmcli connection add type wifi ifname wlp58s0 master My-Connections-Bond ssid My-SSID con-name My-Wifi-Connection
  
# Add your Wifi credentials
$ nmcli connection modify My-Wifi-Connection wifi-sec.key-mgmt wpa-psk

$ nmcli connection edit My-Wifi-Connection

    nmcli> set wifi-sec.psk YOUR-PASSWORD  
    nmcli> save
    nmcli> quit

# Enable the connections
$ nmcli connection up My-Connections-Bond
$ nmcli connection up My-Eth-Connection
$ nmcli connection up My-Wifi-Connection
  

Это должно позволить вам перемещаться между вашими соединениями Wi-Fi и Ethernet и поддерживать текущие сеансы SSH, VPN и т. Д. Подключенными.

Кредиты на: https://fedoramagazine.org/bond-wifi-and-ethernet-for-easier-networking-mobility/

Я справляюсь с этим двумя способами:

Начните сеанс с сервера терминалов в вашем центре данных (RDP/Windows/ и т. Д.)

ИЛИ ЖЕ

Установите экран GNU или tmux и запустите их после входа в систему.

я предпочитаю tmux так как screen довольно старая школа, но если вам разрешено устанавливать только поддерживаемые пакеты, screen в репо RHEL.

ИЛИ ЖЕ

Делай оба.

Проблема, вероятно, в том, что ваш IP-адрес источника меняется, когда вы переключаетесь между кабельным и Wi-Fi. Это предотвратит возврат сессий ssh.

Я справился с этим в linux, подключившись через vpn и убедившись, что соединение vpn всегда дает один и тот же ip вашей учетной записи (не сложно применить, но высока вероятность того, что вы все равно получите по умолчанию тот же ip через vpn, если он доступно, но лучше придерживаться этого, чтобы быть уверенным). Я в основном использую vtun, но openvpn тоже в порядке. Убедитесь, что ваши соединения проходят через vpn (правильная маршрутизация, заданные префиксы,...)

Я был в состоянии быть в автономном режиме от кабеля даже в течение 5 минут, а затем подключиться к Wi-Fi и по-прежнему могу оставаться на связи со всеми моими сессиями SSH. Постоянный пинг, mtr, htop,... просто продолжайте, когда vpn восстанавливается, как будто ничего не произошло.

Это не может быть сделано легко.

Я могу указать вам на ряд очень дорогих приложений, которые позволяют вам поддерживать сеанс telnet или SSH при перемещении между IP-адресами или точками доступа или даже в течение периодов длительных периодов отключения сети, но они в основном достигают этого, создавая всегда открытый сервер -сессионный сеанс для клиентского компьютера, поэтому сервер не знает, что соединение отличается или разорвано.

Я полагаю, что вы могли бы написать такую ​​вещь, но я полагаю, что если бы это было легко сделать, мои клиенты не получили бы изнасилование с пятизначной стоимостью за то, что их терминальные соединения были открыты на беспроводных портативных сканерах.

Тем не менее, я наткнулся на экран, который утверждает, что создает постоянные сессии SSH, которые могут на самом деле работать... дать ему шанс.

вот какой-то инструмент, позволяющий сохранить ваше ssh-соединение при изменении Wi-Fi или колебаниях сети
(без разрыва сеанса)
(может выжить в спящем режиме, но не может выжить после перезагрузки с обновлением)

Попробуйте быть только на Wi-Fi при первом запуске сеанса SSH. Затем подключите Ethernet. Это должно позволить новым соединениям проходить через Ethernet, но установленное соединение останется на Wi-Fi. По крайней мере, я видел, как это работает с OSX, поэтому ОС / оборудование может отличаться.

Я почти уверен, что вы можете сделать это с каким-то глупым количеством хаков с ВМ и туннелированием.

Это не проверено, но дайте мне знать, если это действительно работает.

  1. Создайте гостевую виртуальную машину, которая имеет 2 интерфейса, 1 мостовой адаптер (для Wi-Fi) и 1 хост-сеть
  2. Допустим, у виртуальной машины есть 192.168.0.25 для мостового адаптера для жены и 192.168.56.5 только для хоста.
  3. Внутри vm создайте соединение ssh с туннелем к порту удаленной стороны 22 ssh -L 10022:remote.server.example.com:22
  4. Теперь подключитесь через туннель. ssh 192.168.56.3 -p 10022
  5. Если вы потеряете соединение Wi-Fi, замените адаптер на виртуальной машине на адаптер ethernet.
  6. Надеюсь, это не хуп или не испортить таблицу маршрутизации

дайте мне знать, если это работает.

  1. Телефон Android с приличным оборудованием (samsung10+) 2 . Установите VMOS apt на телефон для рутированной среды vm или используйте любую виртуальную машину для подключения ноутбука, но используйте VirtualBox, потому что это безопасный способ
  2. Загрузитесь в живую ОС Linux, например NST
  3. Используйте опцию хот-спота на вашем телефоне (Android 10) вместе с точкой доступа Bluetooth, а также USB-модем от телефона для всех посетителей. Все одновременно подключаются к вашему телефону в качестве основного источника сети или позволяют подключаться к виртуальной машине Linux при одновременном использовании телефона и Wi-Fi-соединений
  4. Создайте ОС Windows 10 для разработчиков на Hyper-v и запустите все 3 устройства вместе, так как во всех сетевых параметрах подключены (pan, eth0, wlan0, usbnet) горячая точка, повторитель и usb-модем с телефона, а также горячая точка и usb-модем на Win10 dev VM с Wi-Fi и еще одна горячая точка из настроек dev os win10
  5. Легче использовать tor и i2p для более быстрой настройки, но это не нужно
  6. Запустите ssh на всех 3 или подключитесь, используя обычные настройки подключения ssh. Это должно дать вам возможность летать как орел.
Другие вопросы по тегам