Co powoduje problemy z SSH po ponownym uruchomieniu serwera 14.04?

15

Dlaczego ponowne uruchomienie serwera z systemem Ubuntu 14.04 powoduje błędy „Odmowa połączenia”?

Widzę, ssh: connect to host <IP-address-here> port 22: Connection refusedale tylko 14.04 i dopiero po ponownym uruchomieniu. Używam komputera stacjonarnego 12.04. Jak rozwiązać ten problem?


Aby wyjaśnić pytanie, oto, co działa lub nie działa dla mnie:

  • SSH do nowej instalacji 12.04> wyloguj się> SSH ponownie> działa
  • SSH do nowej instalacji 12.04> uruchom ponownie> SSH ponownie> działa
  • SSH do nowej instalacji 14.04> wyloguj się> SSH ponownie> działa
  • SSH do nowej instalacji 14.04> uruchom ponownie> SSH ponownie> Połączenie odrzucone

Problem, który mam, jest unikalny dla 14.04 i występuje tylko po ponownym uruchomieniu. Mam kilka serwerów wcześniejszych niż 12.04 i wszystko nadal działa idealnie. Mam nowy serwer, na którym chcę używać 14.04 i chcę zrozumieć, co się dzieje. Jakieś sugestie?


Oto, co próbowałem do tej pory:

sudo traceroute -p 22 -T <IP-address-here>

Traceroute działa dobrze, otrzymuję odpowiedź z serwera na porcie SSH 22.

initctl list
...
ssh start/running, process 23371
...

Wygląda na to, że ssh na serwerze 14.04 jest ustawiony na start przy starcie (zgodnie z oczekiwaniami).

tom@Desktop:~$ ssh -vvv root@<IP-address-here>
OpenSSH_5.9p1 Debian-5ubuntu1.4, OpenSSL 1.0.1 14 Mar 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to <IP-address-here> [<IP-address-here>] port 22.
debug1: connect to address <IP-address-here> port 22: Connection refused
ssh: connect to host <IP-address-here> port 22: Connection refused

Edycja: Oto cały syslog ze świeżo utworzonej maszyny . Utworzyłem go, SSH wpuściłem i wydałem reboot nowpolecenie, a następnie dostałem błąd odmowy połączenia po tym, jak czekałem na ponowne uruchomienie i próbę SSH po raz drugi. Twardy restart za pośrednictwem panelu sterowania hosta, a teraz połączenie SSH znów działa.

Tom Brossman
źródło
Mam podobny problem, ale w zupełnie innym kontekście. Wygląda na to, że coś się zmieniło, ale nie jestem w stanie dowiedzieć się, co. Wiem, że są zmiany w udev, ale nie widzę dokładnie, jak by to miało znaczenie, ponieważ w przeciwnym razie sieć działa poprawnie. Sam sshd jest kłopotliwy.
Jo-Erlend Schinstad
1
@ Jo-ErlendSchinstad Spędziłem dzisiaj 2 godziny na testowaniu tego z serwerami AWS, DigitalOcean i OVH i mogę to odtworzyć w 100% przypadków. 12,04 = ok, 14,04 = brak SSH po ponownym uruchomieniu. Gdyby to był błąd, spodziewalibyśmy się, że usłyszelibyśmy od wielu innych zablokowanych na swoich serwerach! Mam nadzieję, że coś przeoczyłem, ale ze świeżą instalacją + jednym loginem SSH do ponownego uruchomienia, nie ma tu dużo miejsca na ludzkie błędy. Właśnie przetestowałem to teraz z mojego laptopa 14.04 (na wypadek, gdyby była to rzecz 12.04) i bez zmian, ten sam wynik. Naprawdę mam nadzieję, że wkrótce to
rozwiążemy
1
Och, mam wiele serwerów bez sshd. To jest problem, o którym mówiłem
Jo-Erlend Schinstad

Odpowiedzi:

17

Szybka odpowiedź:

SSH nie stanowi problemu. Polecenie użyte do ponownego uruchomienia jest problemem: nie rób reboot now, róbreboot anishutdown -r now restartuj systemu.

Składnia polecenia ( od 13.04 ) to:

reboot [OPTION]...  [REBOOTCOMMAND]

The REBOOTCOMMANDWcześniej nigdy nie istniał. W 12.04 twój nowzostał po prostu zignorowany, ale teraz jest używany ... I wszystko psuje.

Długa odpowiedź, z wynikami moich testów i wyjaśnieniem:

Mam podobny problem z niektórymi serwerami z uruchomionym 14.04 ORAZ w VPS (hostowanym u francuskiego dostawcy OVH - z uruchomionym OpenVZ) ORAZ podczas pracy reboot nowwewnątrz samego serwera.

Tak jak ty wydałem polecenie reboot nowz konsoli (zalogowałem się za pomocą SSH). Kilka sekund po naciśnięciu RETURNmoja sesja jest automatycznie rozłączana. Tak jak ty nigdy nie byłem w stanie połączyć się ponownie z serwerem za pośrednictwem SSH po wydaniu tego polecenia.

Postanowiłem więc otworzyć konsolę KVM dostarczoną przez OVH. (emulowanie bezpośredniego dostępu za pomocą klawiatury i ekranu na serwerze fizycznym dla tego rodzaju serwera wirtualnego).

Byłem w stanie połączyć się z moją maszyną i zobaczyłem, że wchodzi w tryb pojedynczego użytkownika, czekając, aż naciśniesz CTRL+, Daby kontynuować lub wprowadź hasło roota, aby przejść do trybu konserwacji. Nacisnąłem kombinację klawiszy, aby kontynuować proces, a następnie mogłem ponownie włączyć SSH do mojego systemu. Jaka była moja niespodzianka po zobaczeniu, uptimeże czas działania nie wynosił 2 lub 3 minuty, ale jeszcze dużo dnia:reboot now wykonany w systemie Ubuntu 14.04 VPS tak naprawdę nie uruchamia się ponownie, ale po prostu prosi o przejście w tryb pojedynczego użytkownika!

Na podstawie tego nauczyłem się nigdy nie prosić o ponowne uruchomienie z poziomu mojego VPS, ale prosić o to z polecenia podanego w interfejsie zarządzania hosta.

Dlatego nie ma problemu z instalacją SSH. Problem polega na pisaniu reboot now. W rzeczywistości przetestowałem go później, jeśli wpiszesz reboot(tylko słowo, brak opcji), zrobiłoby to, co chciałeś zrobić: zrestartować serwer.

Używanie rebootz argumentem (ze strony podręcznika) wywołuje polecenie shutdownz podanymi argumentami. I rzeczywiście, jeśli wykonam shutdown now, mam takie samo zachowanie: system nie jest restartowany, przechodzi w tryb pojedynczego użytkownika.

Uwaga: wygląda na to, że jest to zamierzone zachowanie, ponieważ komunikat pojawiający się na ekranie po usłyszeniu wykonania tego polecenia mówi:

System przejdzie w tryb konserwacji

Tryb konserwacji lub tryb pojedynczego użytkownika, reprezentują to samo, poziom działania z zapisem więcej niż powłoki, bez sieci, bez procesów sieciowych, ...

Może to być mylące, ale należy pamiętać, że poprawne użycie shutdownto na przykład: shutdown -h nowzatrzymanie systemu teraz lub shutdown -r nowjego ponowne uruchomienie. Nie wiedziałem, że system shutdown nowprzejdzie tylko w tryb pojedynczego użytkownika. Zazwyczaj robię to, init Saby to osiągnąć.

Benoit
źródło
Dzięki za tę najciekawszą odpowiedź! Zamierzam to wszystko przetestować teraz, gdy jestem na serwerze dedykowanym (nie VPS), ale miałem problem z obydwoma typami - o ile było 14.04, a nie 12.04. sudo reboot nowdziała doskonale w 12.04 i uptimeodpowiada ostatnim razem, gdy to robię. Jednak bardzo interesująca zmiana na 14.04.
Tom Brossman,
1
ten sam problem występuje po aktualizacji serwera do 14.04.1 i ponowne uruchomienie go nie rozwiązuje.
chhantyal
Naprawiłem to dla mnie. Musiałem ręcznie zrestartować serwer. Wow, to jest bardzo denerwujące! Dlaczego, u licha, miałby teraz oznaczać tryb pojedynczego użytkownika? Co za głupi wybór. Dlaczego nie sudo reboot --single-useruzyskać tej funkcjonalności?
jcollum
2

Mogę się spóźnić i może to być oczywiste, ale działało dla mnie sprawdzenie pliku konfiguracyjnego /etc/ssh/sshd_config: uruchomienie demona z /etc/init.d/ssh startdowolną inną kombinacją pokazało, że usługa działała, chociaż tak nie było, ale jeśli uruchomię plik wykonywalny z jego bezwzględna ścieżka (w moim przypadku /usr/sbin/sshd) Widziałem, że na końcu pliku konfiguracyjnego było dołączone „0B”, które powodowało błąd podczas uruchamiania, usunięcie go rozwiązało problem.

Tama
źródło
Bardzo przydatne - w moim przypadku wpisałem błędny znak na początku pliku. Bardzo tajemnicze, jak żaden błąd nie jest generowany, jeśli występuje problem w konfiguracji, i wszystko wydaje się zaczynać, nawet jeśli nie ma uruchomionego procesu.
Andrew Mao,
2

Inną potencjalną przyczyną jest ufwutrata konfiguracji reguły portu SSH. Zdarzyło mi się to co najmniej raz lub dwa razy, gdy po zastosowaniu aktualizacji i ponownym uruchomieniu komputera konfiguracja zapory blokowała dostęp do serwera. Korzystanie z funkcji konsoli VPS mojego dostawcy hostingu pozwoliło mi dostać się na maszynę i zdiagnozować problem. Przykład poniżej pokazujący problem (tj. Brak wpisu dla portu 22):

user@host:~$ sudo ufw status verbose
[sudo] password for user:
Status: active
Logging: on (low)
    Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
80,443/tcp (Nginx Full)    ALLOW IN    Anywhere
25/tcp                     ALLOW IN    Anywhere
143                        ALLOW IN    Anywhere
110                        ALLOW IN    Anywhere
993/tcp (Dovecot Secure IMAP) ALLOW IN    Anywhere
995/tcp (Dovecot Secure POP3) ALLOW IN    Anywhere
25/tcp (Postfix)           ALLOW IN    Anywhere
465/tcp (Postfix SMTPS)    ALLOW IN    Anywhere
80,443/tcp (Nginx Full (v6)) ALLOW IN    Anywhere (v6)
25/tcp (v6)                ALLOW IN    Anywhere (v6)
143 (v6)                   ALLOW IN    Anywhere (v6)
110 (v6)                   ALLOW IN    Anywhere (v6)
993/tcp (Dovecot Secure IMAP (v6)) ALLOW IN    Anywhere (v6)
995/tcp (Dovecot Secure POP3 (v6)) ALLOW IN    Anywhere (v6)
25/tcp (Postfix (v6))      ALLOW IN    Anywhere (v6)
465/tcp (Postfix SMTPS (v6)) ALLOW IN    Anywhere (v6)

Ponowne włączenie portu w następujący sposób rozwiązuje problem:

user@host:~$ sudo ufw allow ssh
Rule added
Rule added (v6)
John Rix
źródło
-1

W moim systemie problem polegał na tym, że skrypt inicjujący ssh /etc/init.d/sshbył jedynym sprawdzającym obecność nowszej wersji init.

Więc /etc/init.d/sshsię nie zaczyna, ssh,bo uważa, że ​​to się zacznieupstart .

W moim przypadku upstart nie uruchamia się z powodu mojej konkretnej konfiguracji:

Konfiguracja była prawidłowa /etc/init/ssh.conf, ale był też /etc/init/ssh.overrideplik zawierający manual, co oznaczassh że należy uruchomić ręcznie.

Ten plik został utworzony przez get-remnux.sh skrypt instalacyjny.

Uruchomienie ręczne lub usunięcie /etc/init/ssh.overridepliku rozwiązuje problem.

Michał Ambroz
źródło