Сценарий:
Я пробовал: сначала подключиться к WiFi, а затем отключить Ethernet; а также сначала отключите Ethernet, а затем подключитесь к Wi-Fi. Ни один из подходов не работает. Также пробовал использовать серверы Ubuntu и OS X вместе с обеими опциями ОС, а также для клиента. Не повезло.
Похоже, мне нужен способ сообщить моему SSH-соединению, что оно должно начать использовать только что подключенный сетевой интерфейс вместо старого отключенного интерфейса. Любые идеи?
Я понимаю, что могу просто оставаться на Wi-Fi целый день, но я не хочу этого делать. Я также понимаю, что могу просто работать из сеанса экрана на удаленном сервере, а затем повторно подключиться к этому сеансу экрана после изменения интерфейсов, но я тоже не хочу этого делать. Например, я мог бы передать какую-то большую команду, такую как дамп базы данных по SSH, или у меня могут быть файлы, открытые через SSHFS, или я мог бы просто избежать неудобств повторного подключения
Я подозреваю, что это решение не будет работать для SSHFS и т. Д., Но вы можете взглянуть на Mosh который обеспечивает поддержку роуминга, по крайней мере, для самой оболочки.
Боюсь, вы не можете этого сделать по определению. Сеанс SSH выполняется через TCP-соединение, которое определяется четырьмя кортежами (адрес источника, порт источника, адрес назначения, порт назначения). Вы не можете переключить существующее соединение на другой адрес на клиенте (кроме того факта, что ОС разорвет соединение, когда интерфейс выйдет из строя).
NAT может усложнить эту картину, но никак не поможет.
Я справляюсь с этим двумя способами:
Запустите сеанс с терминального сервера в вашем центре обработки данных (RDP / Windows / и т. Д.)
ИЛИ
Установить GNU экран или tmux и запустить их после входа в систему.
я предпочитаю tmux
так как screen
довольно старая школа, но если вам разрешено устанавливать только поддерживаемые пакеты, screen
находится в репо RHEL.
ИЛИ
Сделайте и то, и другое.
Старая ветка, я знаю, но для полноты картины, так как я искал то же самое ...
В Windows 7 или новее вы должны просто выбрать свой адаптер Wi-Fi и адаптер Ethernet и выбрать «Мостовое соединение». Это даст вам один IP-адрес для обоих, и теперь вы сможете отключать и повторно подключать Ethernet по своему желанию (при условии непрерывного покрытия Wi-Fi).
Проблема, вероятно, в том, что ваш исходный IP-адрес меняется при переключении между кабельным и Wi-Fi. Это предотвратит возврат сеансов ssh.
Я справился с этим в Linux, подключившись через vpn и убедившись, что vpn-соединение всегда дает один и тот же IP-адрес вашей учетной записи (нетрудно обеспечить соблюдение, но высока вероятность, что вы все равно получите тот же IP-адрес через vpn по умолчанию, если он доступно, но лучше обеспечить его соблюдение, чтобы быть уверенным). Я в основном использую vtun, но openvpn тоже подойдет. Убедитесь, что ваши соединения проходят через vpn (правильная маршрутизация, вставленные префиксы, ...)
Я мог быть в автономном режиме от кабеля даже на 5 минут, а затем подключился к Wi-Fi и по-прежнему мог оставаться подключенным ко всем своим сеансам ssh. Текущий ping, mtr, htop, ... просто продолжайте, когда vpn восстанавливается, как будто ничего не произошло.
Это нелегко сделать.
Я могу указать вам на ряд очень дорогих приложений, которые позволяют поддерживать сеанс telnet или SSH при перемещении между IP или AP или даже в течение периодов длительного отключения сети, но в основном они достигают этого, создавая всегда открытый сервер. -side сеанс для клиентской машины, чтобы сервер не знал, что соединение отличается или разорвано.
Я полагаю, вы могли бы написать такую вещь, но я полагаю, что если бы это было легко сделать, мои клиенты не были бы изнасилованы пятизначными затратами за то, чтобы их терминальные соединения оставались открытыми на беспроводных портативных сканерах.
Хотя я наткнулся на экран, который утверждает, что создает постоянные сеансы SSH, который действительно может сработать ... попробуйте.
Ты можешь связь соединения 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/
Попробуйте подключиться только к Wi-Fi при первом запуске сеанса ssh. Затем подключите ваш Ethernet. Это должно позволить новым соединениям проходить через Ethernet, но установленное соединение останется по Wi-Fi. По крайней мере, я видел, как это работает с OSX, поэтому ОС / оборудование могут отличаться.
Я почти уверен, что вы можете сделать это с помощью некоторого глупого взлома с виртуальными машинами и туннелированием.
Это не проверено, но дайте мне знать, действительно ли это работает.
ssh -L 10022:remote.server.example.com:22
ssh 192.168.56.3 -p 10022
дайте мне знать, если это сработает.