Posługiwać się -o reconnect,ServerAliveInterval=15,ServerAliveCountMax=3
Ta kombinacja ServerAliveInterval=15,ServerAliveCountMax=3
powoduje wyskakiwanie błędów we / wy po minucie przerwy w sieci. Jest to ważne, ale w dużej mierze nieudokumentowane. Jeśli ServerAliveInterval
opcja pozostanie domyślnie (więc bez sprawdzania aktywności), procesy, które zawieszają się we / wy wydają się spać w nieskończoność, nawet po sshfs reconnect
. Uważam to za bezużyteczne zachowanie.
Innymi słowy, to, co dzieje się dalej -o reconnect
bez przypisywania, ServerAliveInterval
polega na tym, że dowolne we / wy albo zakończy się sukcesem, albo zawiesi aplikację na czas nieokreślony, jeśli ssh ponownie się połączy. W rezultacie typowa aplikacja zostaje całkowicie zawieszona. Jeśli chcesz zezwolić I / O na zwrócenie błędu i wznowienie aplikacji, potrzebujesz ServerAliveInterval=1
lub więcej.
Jest ServerAliveCountMax=3
to i tak domyślna wartość, ale chcę ją określić dla czytelności.
man 5 ssh_config
aby uzyskać więcej szczegółów, ale sedno jest takie, że co 15 sekund ssh będzie wysyłał coś w rodzaju „utrzymywania przy życiu” ping co 15 sekund, aby upewnić się, że komputery nadal reagują na siebie. Jeśli trzy kolejne pingi zawiodą (45 sekund), podłącz ponownie.ServerAliveCountMax=3
ma inne znaczenie. Jeśli wystąpi awaria, spróbuje połączyć się jeszcze 3 razy, a następnie zrezygnuje. W pewnym momencie ponawianie jest daremne, ale zależy to od zastosowania. Z drugiej strony, myślę, że strona podręcznika może być bardziej szczegółowa, istnieją różne sposoby interpretacji sposobu, w jaki została sformułowana jako IMO. FWIW mój konkretny problem zniknął po przejściu na ProtonVPN. Myślę, że warto również sprawdzić konfigurację ssh na kliencie i serwerze, mają one osobne opcje, więc wszystko, czego naprawdę potrzebujesz, to-o reconnect
Dzięki za porady autossh i autofs.
Jednak dla mojego bezpośredniego celu znalazłem znacznie prostsze rozwiązanie, które nie zostało tak dobrze udokumentowane:
źródło
Autossh automatycznie łączy sesje ssh, gdy zauważy, że ssh zmarł lub przestał przekazywać ruch. Ponieważ jest to po prostu zautomatyzowany ssh, będzie działał z różnych adresów IP i z zawieszenia (nawet jeśli laptop budzi się na innej sieci LAN).
źródło
Jedną rzeczą, którą możesz zrobić, to zamontować systemy plików za pomocą autofs . Autofs to narzędzie, które zamontuje system plików, gdy chcesz użyć czegoś w katalogu, do którego system plików zostanie podłączony. Po wykryciu aktywności system plików jest montowany. Kiedy nic się nie dzieje w systemie plików, jest ono odmontowane.
Oto howto , które znalazłem w google, aby to osiągnąć, tam, gdzie kilka innych.
źródło
Podejrzewam, że tak nie jest, ponieważ nawet jeśli możesz skonfigurować klienta SSH, aby nie przerywał połączenia, serwer może być skonfigurowany tak, aby robił to po określonym czasie bezczynności i nie będziesz w stanie tego zastąpić. Nawet jeśli możesz, jeśli nigdy nie wznowisz połączenia, serwer pozostanie zawieszony, az czasem może to doprowadzić do znacznego marnowania zasobów serwera.
Myślę, że lepszą techniką jest odmontowanie systemu plików przed zawieszeniem komputera i ponowne zamontowanie go, gdy komputer ponownie się obudzi. Mechanizm tego może zależeć od tego, w jaki sposób zawieszasz komputer - używam jądra smokingu i robię coś takiego, mam dyrektywę taką jak
w
/etc/hibernate/common.conf
.źródło
Odpowiedź kubanczyk jest wielki. Miałem problem z zawieszeniem całego interfejsu z powodu zbyt chciwego sshfs, teraz dla łatwego połączenia rozpoczętego przez skrypt, który łączy się ponownie po otwarciu laptopa i który nie zawiesza się, gdy połączenie się spowalnia, możesz użyć takiego skryptu bash (może niezbyt bezpieczne, ale wygodne np. w przypadku wielu projektów internetowych):
źródło