utrzymuj połączenie ssh żywe i trwałe podczas przełączania połączeń interfejsu sieciowego

13

Scenariusz:

  1. Przy moim biurku laptop podłączony do sieci Ethernet i podłączony do zdalnego serwera przez SSH
  2. Chcesz przenieść się na drugą stronę biura z laptopem i przejść na Wi-Fi bez przerywania połączenia SSH

Próbowałem: najpierw podłączenie do Wi-Fi, a następnie rozłączenie sieci Ethernet; a także najpierw odłączając Ethernet, a następnie łącząc się z Wi-Fi. Żadne z tych podejść nie działa. Wypróbowano również podczas używania serwerów Ubuntu i OS X wraz z obiema opcjami systemu operacyjnego również dla klienta. Brak szczęścia.

Wydaje się, że potrzebuję jakiegoś sposobu, aby powiedzieć mojemu połączeniu SSH, że powinien zacząć korzystać z nowo podłączonego interfejsu sieciowego zamiast starego odłączonego interfejsu. Jakieś pomysły?

Zdaję sobie sprawę, że mógłbym cały dzień korzystać z Wi-Fi, ale nie chcę tego robić. Zdaję sobie również sprawę, że mogę po prostu pracować z sesji ekranowej na zdalnym serwerze, a następnie ponownie łączyć się z tą sesją ekranową po zmianie interfejsów, ale nie chcę tego robić. Na przykład, mogę przesyłać jakieś duże polecenie, takie jak zrzut bazy danych przez SSH, albo mogę mieć pliki otwarte przez SSHFS, lub po prostu chcę uniknąć uciążliwego ponownego połączenia

Sean
źródło
3
Jeśli otrzymasz ten sam adres IP w obie strony, to powinno działać. Jeśli nie, to prawie niemożliwe.
Alan Curry,
@AlanCurry Jeśli zarówno klient, jak i serwer obsługują MPTCP, jest to możliwe. Jednak obsługa MPTCP jest nadal bardzo ograniczona, więc jest to mało prawdopodobne.
kasperd

Odpowiedzi:

4

Podejrzewam, że to rozwiązanie nie będzie działać dla SSHFS itp., Ale możesz rzucić okiem na Mosh, który zapewnia obsługę roamingu przynajmniej dla samej powłoki.

Grisha Levit
źródło
Wygląda to na bardzo dobre rozwiązanie, ale niestety musi być również zainstalowane na serwerze, co nie zawsze jest możliwe ze względu na uprawnienia.
user000001
4

Obawiam się, że nie możesz tego zrobić z definicji. Sesja SSH działa przez połączenie TCP, które jest zdefiniowane przez czterokrotną (adres źródłowy, port źródłowy, adres docelowy, port docelowy). Nie można przenieść istniejącego połączenia na inny adres na kliencie (poza tym, że system operacyjny zerwie połączenie, gdy interfejs się zepsuje).

NAT może skomplikować ten obraz, ale nie w żaden sposób, który ci pomoże.

Richard E. Silverman
źródło
Tak, ale aplikacja może się połączyć ponownie, gdy dowie się, że gniazdo zostało zamknięte. Czy protokół SSH ma możliwość wznowienia starej sesji?
Ajay Brahmakshatriya
@AjayBrahmakshatriya SSH nie ma narzędzi do wznawiania sesji
Ferrybig
2

Stary wątek, wiem, ale ze względu na kompletność, ponieważ szukałem tego samego ...

W systemie Windows 7 lub nowszym powinieneś po prostu móc wybrać zarówno kartę Wi-Fi, jak i Ethernet i wybrać „Połączenie mostkowe”. To da ci jeden adres IP dla obu, a teraz będziesz mógł odłączyć i ponownie podłączyć Ethernet do woli (biorąc pod uwagę ciągły zasięg Wi-Fi).

Tor
źródło
Dobry pomysł, będę musiał spróbować.
Doug
Jeśli to zrobisz, nie możesz jednocześnie obu sieci, w zależności od konfiguracji, kopie wszystkich w obszarze sieci (źródło: tak się stało)
Ferrybig
2

Zarządzam tym na dwa sposoby:

Rozpocznij sesję z serwera terminali w swoim centrum danych (RDP / Windows / etc)

LUB

Zainstaluj GNU lub i uruchom je po zalogowaniu.

Wolę, tmuxponieważ screenjest to dość stara szkoła, ale jeśli wolno ci tylko instalować obsługiwane pakiety, screenznajduje się w repozytorium RHEL.

LUB

Zrób jedno i drugie.

Doug
źródło
tmuxjest naprawdę przydatny. Uruchamianie zdalnych rzeczy wewnątrz tmuxjest doskonałym nawykiem.
pisklęta
Tak, zgadzam się. Funkcja wielu okien jest świetna.
Doug
1

Nie da się tego łatwo zrobić.

Mogę wskazać na wiele bardzo drogich aplikacji, które pozwalają zachować sesję telnet lub SSH podczas przechodzenia między adresami IP lub AP, a nawet przez dłuższy czas odłączenie sieci, ale w zasadzie osiągają to poprzez utworzenie zawsze otwartego serwera sesja poboczna dla komputera klienckiego, aby serwer nie wiedział, że połączenie jest inne lub zostało przerwane.

Podejrzewam, że można by coś takiego zakodować, ale wyobrażam sobie, że gdyby to było łatwe, moi klienci nie byliby zgwałceni z pięciocyfrowymi kosztami za utrzymanie otwartych połączeń terminali w bezprzewodowych skanerach ręcznych.

Chociaż natknąłem się na ekran, który twierdzi, że tworzy trwałe sesje SSH , które mogą faktycznie działać ... daj temu szansę.

Beznadziejny
źródło
1

Problemem jest prawdopodobnie to, że Twój źródłowy adres IP zmienia się po przełączeniu między przewodowym a Wi-Fi. Zapobiegnie to powrotom sesji ssh.

Poradziłem sobie z tym w systemie Linux, łącząc się z VPN i upewniając się, że połączenie VPN zawsze daje ten sam adres IP na twoje konto (nie jest trudne do wyegzekwowania, ale istnieje duże prawdopodobieństwo, że otrzymasz ten sam adres IP przez VPN już domyślnie, jeśli jest to dostępne, ale dla pewności lepiej je wymuszaj). Najczęściej używam vtun, ale openvpn też jest w porządku. Upewnij się, że twoje połączenia przechodzą przez VPN (poprawne routing, wypchnięte prefiksy, ...)

Mogłem być offline od kabla nawet przez 5 minut, a następnie połączyć się z Wi-Fi i nadal być w stanie pozostać w kontakcie ze wszystkimi moimi sesjami ssh. Trwający ping, mtr, htop, ... po prostu kontynuuj po przywróceniu VPN, jakby nic się nie stało.

multia
źródło
0

Spróbuj być tylko w Wi-Fi, kiedy zaczynasz sesję ssh. Następnie podłącz Ethernet. To powinno pozwolić nowym połączeniom na przejście przez Ethernet, ale ustanowione połączenie pozostanie w Wi-Fi. Przynajmniej widziałem, że działa to tak z OSX, więc OS / sprzęt może się różnić.

stawanie się
źródło
0

Jestem pewien, że możesz to zrobić za pomocą głupiego hakowania za pomocą maszyn wirtualnych i tunelowania.

To nie zostało przetestowane, ale daj mi znać, czy to rzeczywiście działa.

  1. Utwórz maszynę wirtualną gościa, która ma 2 interfejsy, 1 mostkowany adapter (do Wi-Fi) i 1 sieć tylko z hostem
  2. Załóżmy, że maszyna wirtualna ma 192.168.0.25 dla mostkowanego adaptera dla żony i 192.168.56.5 tylko dla hosta.
  3. W ramach vm utwórz połączenie ssh z tunelem do portu 22 strony zdalnej ssh -L 10022:remote.server.example.com:22
  4. Teraz połącz przez tunel. ssh 192.168.56.3 -p 10022
  5. W przypadku utraty połączenia Wi-Fi zmień adapter na maszynie wirtualnej na Ethernetowy adapter sieciowy.
  6. Mam nadzieję, że to nie psuje ani nie psuje tabeli routingu

daj znać czy działa.

Mike Graf
źródło