Zasadniczo w pracy tracimy łączność z Internetem na kilka sekund na raz, co wystarcza, aby zabić nasze tunele SSH, zabić nasze połączenia VoIP itp. Mam konfigurację cronjob z własnym skryptem do wykrywania poważnych awarii ( trwające dłużej niż minutę), ale nie mogę wykryć tych trwających sekundę awarii.
Zwykle w ciągu dnia mam tunel SSH podłączony do jednego z naszych serwerów. To połączenie trwa przez większość dnia, więc myślę o utworzeniu skryptu, który tworzy kolejne połączenie z tym samym serwerem, rejestruje, kiedy połączenie z serwerem jest zrywane, a następnie ponownie ustanawia połączenie w celu dalszego logowania. Czy jest to możliwe przy podstawowym bashu?
Odpowiedzi:
Istnieje kilka sposobów przeciwdziałania utracie łączności dla sesji ssh.
Po pierwsze, możesz ustawić opcje ServerAliveInterval, ClientAliveInterval i ClientAliveCountMax. ServerAliveInterval to liczba sekund, jaką klient będzie czekał przed wysłaniem pakietu zerowego na serwer (aby utrzymać połączenie przy życiu), typowa jest wartość 60. ClientAliveInterval to liczba sekund, przez którą serwer będzie czekał przed wysłaniem pustego pakietu do klienta. Wreszcie, ClientAliveCountMax to liczba ClientAliveInterval, w których klient może pozostać sieciowy, zanim połączenie zostanie zerwane; wartość domyślna to 3, co oznacza trzykrotność upływu czasu ClientAliveInterval.
Alternatywnie możesz użyć Mosh , mobilnej powłoki, która ...
Następnie możesz użyć autossh zamiast ssh:
To, którą drogą wybierzesz, zależy głównie od gustów. Jeśli chodzi o mnie, używam autossh do tuneli, które chciałbym mieć na stałe, szczególnie tunele do tyłu; Używam mosh do naprawdę katastrofalnych połączeń, na przykład kiedy ssh''h do mojego laboratorium z samolotu lub samochodu. We wszystkich innych przypadkach dokonany zostanie rozsądny wybór powyższych parametrów dla openssh: na przykład mój plik .ssh / config zawiera następujące wiersze:
i podobnie dla serwerów, w pliku / etc / sshd_config .
Nawiasem mówiąc, do monitorowania połączenia przez długi czas możesz użyć mtr (= My TraceRoute), inteligentnej kombinacji traceroute i ping, która będzie wykonywać traceroute co tyle sekund (domyślnie = 1 sekunda) danej witryny i bezproblemowo zaktualizuje statystyki udanych pingów, dając ci możliwość ustalenia co najmniej średniej części czasu bezawaryjnej pracy, ale nie ich dystrybucji.
źródło
W końcu poprawiłem skrypt, aby zasadniczo działał nieprzerwanie i zaczyna logować się po utracie połączenia, zamiast szukać utraconego połączenia:
https://github.com/NobleUplift/NetCheck
Ale tak naprawdę musieliśmy po prostu zmienić dostawcę usług internetowych.
źródło