Mam serwer, na którym działa Debian i sshd, a na wypadek konieczności ponownego uruchomienia serwera moja sesja SSH zawiesza się po stronie klienta aż do przekroczenia limitu czasu TCP. Zakładam, sshd
że dzieje się tak, ponieważ po zakończeniu nie jawnie zamyka otwartych sesji SSH dla hosta. Co powinienem zrobić, aby sshd
najpierw odłączyć wszystkich, a następnie zakończyć się jak zwykle? Jak dotąd nie widzę parametru man sshd_config
, który byłby związany z zachowaniem wyłączania.
13
Odpowiedzi:
Podczas zamykania lub ponownego uruchamiania systemu
systemd
próbuje zatrzymać wszystkie usługi tak szybko, jak to możliwe. Obejmuje to wyłączenie sieci i zakończenie wszystkich procesów, które są nadal aktywne - zwykle w tej kolejności. Więc kiedy systemd zabija rozwidlone procesy SSH, które obsługują twoje sesje SSH, połączenie sieciowe jest już wyłączone i nie mają możliwości płynnego zamknięcia połączenia klienta.Pierwszą myślą może być po prostu zabicie wszystkich procesów SSH jako pierwszy krok podczas zamykania systemu, a jest tam całkiem sporo plików usług systemowych, które właśnie to robią.
Ale jest oczywiście rozwiązanie schludny wygląd (jak to „niby” do zrobienia)
systemd-logind
.systemd-logind
śledzi sesje aktywnych użytkowników (lokalne i SSH) i przypisuje wszystkie procesy odradzane w nich do tak zwanych „plasterków”. W ten sposób, gdy system zostanie zamknięty, systemd może po prostu SIGTERM wszystko wewnątrz segmentów użytkownika (w tym rozwidlony proces SSH, który przekazuje określoną sesję), a następnie kontynuować zamykanie usług i sieci.systemd-logind
wymaga modułu PAM, aby otrzymywać powiadomienia o nowych sesjach użytkowników, i musiszdbus
użyć gologinctl
do sprawdzenia jego statusu, więc zainstaluj oba z nich:Upewnij się, że
/etc/ssh/sshd_config
faktycznie zamierzasz używać modułuUsePAM yes
.źródło
reboot
zrobić zshutdown -r
domyślnym opóźnieniem 1 minuty, pozostawiając czas na zamknięcie sesji SSH.Jest to coś, co musisz ustawić po stronie klienta, a nie po stronie serwera. Edytuj swój,
~/.ssh/config
aby zawierałOznacza to, że po 15 sekundach bezczynności klient wyśle wiadomość do serwera. Jeśli nie otrzyma żadnej odpowiedzi, spróbuje ponownie do 5 razy, a gdy nadal nie otrzyma odpowiedzi, zamknie sesję.
źródło
Takie zachowanie jest zgłaszane w przypadku tego błędu Debiana , wystarczy tylko poprawnie skonfigurować skrypty zamykające dostarczane z pakietem, ponieważ automatycznie nie są one domyślnie kopiowane:
źródło
Możesz określić opcje, o których mówiła Jenny D w swojej odpowiedzi tylko dla jednego polecenia ssh, na przykład
jeśli robisz to często, możesz to zrobić.
źródło
Działa dla mnie z lshd. Tak byłoby rozwiązanie
źródło
Niestety błąd serwera nie pozwolił mi odpowiedzieć w wątku o zbyt mało punktów od lat. Ale nie muszę spamować na innych blogach, aby uzyskać odblokowanie ^^ ... więc jako dedykowaną odpowiedź:
Jak wspomniano Rfraile
Pracuje. Aby korzystać z niego bez ponownego uruchamiania instancji / serwera, należy wykonać dodatkowe zadania:
więc usługa jest zarejestrowana i uruchomiona, a systemd musi ją zatrzymać w celu ponownego uruchomienia / zamknięcia.
źródło