Łączę się z urządzeniem CentOS 5.5 przez SSH z komputera Ubuntu 11.04.
Połączenie wydaje się działać zgodnie z oczekiwaniami, gdy jest aktywne (tj. Bez opóźnienia lub utraty), ale jeśli pozostanie nieaktywne przez chwilę, zawiesi się i przestanie odpowiadać. W końcu zostanie zwrócony komunikat o błędzie „Zapis nieudany: uszkodzona rura” i wrócę po monicie mojego komputera lokalnego.
Co mogę zrobić, aby pomóc w debugowaniu, dowiedzieć się, co się dzieje i rozwiązać ten problem? Będąc programistą, sprawia to, że moje życie staje się uciążliwe, gdy muszę się ciągle łączyć.
man sshd_config
.Właściwa odpowiedź brzmi prawie zawsze, że na ścieżce znajduje się jakieś urządzenie NAT, zwykle zapora ogniowa, której tabele stanów mają dość agresywny limit czasu. Ponieważ pozostawiasz połączenie ssh przez pewien czas bezczynne, urządzenie NAT „zapomina” mapowanie między twoim adresem wewnętrznym i numerem portu źródłowego a efemerycznym poza adresem NATted i numerem portu.
Kiedy później spróbujesz coś zrobić w tym oknie ssh, nowa efemeryczna para adres / port zostanie ci przypisana, o której docelowy serwer ssh nie ma wiedzy i na którą nie odpowiada; później osiągnięto pewien limit czasu lokalnego i połączenie zostanie zerwane przez komputer lokalny.
Praktycznym rozwiązaniem tego problemu jest zrobienie dokładnie tego, co sugeruje yuriismaster: włączenie KeepAlives (które zapewniają regularny ruch w celu „łaskotania” wpisu do tabeli stanów) i użycie
screen
go po stronie zdalnej (aby zachować stan na wypadek, gdyby rzeczy zostały upuszczone). Publikuję tę odpowiedź tylko dlatego, że zapytałeś, co się dzieje, a także co z tym zrobić. Mam nadzieję, że to wyjaśnia, dlaczego sugestie jurora są dobre.źródło