Widzę opóźnienia w logowaniach SSH. W szczególności są 2 miejsca, w których widzę zakres od natychmiastowych do wielosekundowych opóźnień.
- Pomiędzy wydaniem komendy ssh a wyświetleniem monitu logowania i
- między wprowadzeniem hasła a obciążeniem pocisku
Teraz konkretnie patrzę na szczegóły ssh tylko tutaj. Oczywiście opóźnienia sieciowe, szybkość sprzętu i systemów operacyjnych, złożone skrypty logowania itp. Mogą powodować opóźnienia. Dla kontekstu przesyłam ssh do wielu dystrybucji Linuksa i niektórych hostów Solaris, używając głównie Ubuntu, CentOS i MacOS X jako moich systemów klienckich. Prawie cały czas konfiguracja serwera ssh pozostaje niezmieniona w stosunku do domyślnych ustawień systemu operacyjnego.
Jakie konfiguracje serwera ssh powinny mnie zainteresować? Czy istnieją parametry systemu / jądra, które można dostroić? Logowanie do sztuczek shellowych? Itp?
Odpowiedzi:
Spróbuj ustawić
UseDNS
sięno
w/etc/sshd_config
lub/etc/ssh/sshd_config
.źródło
ssh -vvv
)./etc/ssh/sshd_config
! Dodawałem/etc/sshd_config
i nie widziałem żadnej różnicy !!Kiedy uruchomiłem
ssh -vvv
serwer o podobnej niskiej wydajności, zobaczyłem zawieszenie się tutaj:Edytując
/etc/ssh/ssh_config
i komentując tę metodę uwierzytelniania, przywróciłem wydajność logowania do normy. Oto, co mam na swoim/etc/ssh/ssh_config
serwerze:Możesz ustawić to globalnie na serwerze, aby nie akceptował uwierzytelnienia GSSAPI. Wystarczy dodać
GSSAPIAuthentication no
do/etc/ssh/sshd_config
na serwerze i zrestartować usługę.źródło
GSSAPIAuthentication no
iUseDNS no
w/etc/ssh/sshd_config
pliku.Dla mnie winowajcą była rozdzielczość IPv6, upłynął limit czasu. (Chyba złe ustawienie DNS u mojego dostawcy hosta.) Odkryłem to, robiąc
ssh -v
, co pokazało, który krok się zawiesił.Rozwiązaniem jest
ssh
z-4
opcją:ssh -4 [email protected]
źródło
debug2: resolving "thing.net.au" port 22
bez żadnego błędu, ale nie dzieje się tak z opcją -4, co oznacza, że jest to problem z DNS IPv6.W systemie systemd logowanie może się zawiesić na komunikacji dbus z logind po niektórych aktualizacjach, wtedy musisz zrestartować logind
Widziałem to na debian 8, arch linx i na liście suse
źródło
Zawsze możesz zacząć
ssh
od-v
opcji, która wyświetla bieżące działania.Z podanych przez ciebie informacji mogę jedynie zasugerować niektóre konfiguracje po stronie klienta:
Ponieważ piszesz, że wprowadzasz hasła ręcznie, sugeruję, aby w miarę możliwości używać uwierzytelniania za pomocą klucza publicznego. To usuwa cię jako wąskie gardło prędkości.
Możesz także wyłączyć przekazywanie X za pomocą
-x
i przekazywanie uwierzytelnień za pomocą-a
(te mogą być już domyślnie wyłączone). Zwłaszcza wyłączenie X-forwarding może dać dużą poprawę prędkości, jeśli twój klient musi uruchomić X-serwer dlassh
polecenia (np. Pod OS X).Wszystko inne naprawdę zależy od tego, jakiego rodzaju opóźnień doświadczasz gdzie i kiedy.
źródło
Jeśli chodzi o 2. punkt, oto odpowiedź, która nie wymaga modyfikacji serwera ani nie wymaga uprawnień administratora / administratora.
Musisz edytować plik „user ssh_config”, który jest:
(Uwaga: musisz utworzyć katalog $ HOME / .ssh, jeśli nie istnieje)
I dodaj:
W razie potrzeby możesz to zrobić dla każdego hosta :) przykład:
Upewnij się, że adres IP odpowiada adresowi IP twojego serwera. Jedną fajną zaletą jest to, że teraz ssh zapewni autouzupełnianie dla tego serwera. Możesz więc wpisać
ssh lin
+Tab
i powinien on zostać automatycznie uzupełnionyssh linux-srv
.źródło
Sprawdź
/etc/resolv.conf
na serwerze, aby upewnić się, że serwer DNS wymieniony w tym pliku działa poprawnie i usuń niedziałający DNS.Czasami jest to bardzo pomocne.
źródło
Poza wspomnianymi już problemami z DNS, jeśli łączysz się z serwerem z wieloma podłączeniami NFS, może wystąpić opóźnienie między hasłem a pytaniem, gdy
quota
polecenie sprawdzi twoje użycie / przydział we wszystkich systemach plików, które nie zostały zamontowane znoquota
. W systemach Solaris można to zobaczyć domyślnie/etc/profile
i pominąć, uruchamiająctouch $HOME/.hushlogin
.źródło
Dobrze pracować.
UseDNS nie nie działa z OpenIndiana !!!
Przeczytaj „man sshd_config” dla wszystkich opcji
„LookupClientHostnames nie”, jeśli serwer nie może rozwiązać problemu
źródło
Jeśli żadna z powyższych odpowiedzi nie działa i masz problemy z wyszukiwaniem wstecznym dns, możesz również sprawdzić, czy
nscd
(demon pamięci podręcznej usługi nazw) jest zainstalowany i uruchomiony.Jeśli to jest problem, to dlatego, że nie masz pamięci podręcznej dns, i za każdym razem, gdy pytasz o nazwę hosta, która nie znajduje się w pliku hosta, wysyłasz pytanie do serwera nazw zamiast szukać w pamięci podręcznej
Wypróbowałem wszystkie powyższe opcje i jedyną działającą zmianą był start
nscd
.Powinieneś także zweryfikować kolejność, aby
/etc/nsswitch.conf
najpierw rozstrzygnąć zapytanie dns, aby użyć pliku hosts.źródło
Prawdopodobnie jest to specyficzne tylko dla Debian / Ubuntu OpenSSH, który obejmuje tryb user-group-types.patch napisany przez jednego z opiekunów pakietów Debiana. Ta poprawka pozwala plikom ~ / .ssh ustawić bit zapisu grupowego (g + w), jeśli jest tylko jeden użytkownik z takim samym identyfikatorem gid jak plik. Sprawdza to funkcja secure_permissions () łatki. Jedną z faz sprawdzania jest przejście przez każdą pozycję passwd za pomocą getpwent () i porównanie gid pozycji z gid pliku.
W systemie z wieloma wpisami i / lub powolnym uwierzytelnianiem NIS / LDAP sprawdzanie będzie powolne. nscd nie buforuje wywołań getpwent (), więc każdy wpis passwd będzie czytany przez sieć, jeśli serwer nie jest lokalny. W systemie znalazłem to, dodałem około 4 sekund dla każdego wywołania ssh lub logowania do systemu.
Rozwiązaniem jest usunięcie zapisywalnego bitu na wszystkich plikach w ~ / .ssh przez wykonanie
chmod g-w ~/.ssh/*
.źródło
Odkryłem, że ponowne uruchomienie systemd-logind.service wyleczyło problem tylko przez kilka godzin. Zmiana UsePAM z tak na no w sshd_config spowodowała szybkie logowanie, chociaż motd nie jest już wyświetlany. Komentarze na temat problemów bezpieczeństwa?
źródło
Aby wypełnić wszystkie odpowiedzi wskazujące, że rozdzielczości DNS mogą spowolnić logowanie ssh, czasami brakuje reguł zapory. Na przykład, jeśli DROP domyślnie usuwasz wszystkie paquety WEJŚCIA
wtedy musisz zaakceptować WEJŚCIE dla portu ssh i żądania DNS
źródło
ssh -vvv
połączenie poszło naprawdę dobrze, dopóki nie zawiesiło się w systemie próbującym uzyskać terminal przez co najmniej 20 sekund:Po wykonaniu
systemctl restart systemd-logind
na serwerze ponownie miałem natychmiastowe połączenie!To było na debian8 ! Problemem był systemd!
Uwaga: Bastien Durel udzielił już odpowiedzi na ten problem, jednak brakuje mu informacji o debugowaniu. Mam nadzieję, że to komuś pomoże.
źródło
session [default=1] pam_lastlog.so nowtmp showfailed
w/etc/pam.d/postlogin
. Najwyraźniej aktualizacja pliku lastlog była niesamowicie powolna na moim opartym na kontenerach OpenVZ VPS.Niedawno znalazłem inną przyczynę powolnego logowania ssh.
Nawet jeśli masz
UseDNS no
w/etc/sshd_config
, sshd może nadal wykonywać wyszukiwania wstecznego DNS czy/etc/hosts.deny
posiada wpis w stylu:Może się tak zdarzyć, jeśli w systemie są zainstalowane DenyHosts .
Byłoby wspaniale, gdyby ktoś wiedział, jak zmusić DenyHosts do unikania wprowadzania tego rodzaju wpisów
/etc/hosts.deny
.Oto link do FAQ DenyHosts , w jaki sposób usuwać wpisy z
/etc/hosts.deny
- patrz Jak mogę usunąć adres IP, który zablokował DenyHosts?źródło
Może się okazać, że preferowaną metodą rozpoznawania nazw nie jest plik hosta, a następnie DNS.
Na przykład byłaby to zwykła konfiguracja:
Najpierw osiągnięto plik hosts (opcja: pliki), a następnie DNS (opcja: dns), jednak możemy stwierdzić, że dodano inny system rozpoznawania nazw, który nie działa i powoduje, że próbujemy wykonać odwrotną rozdzielczość.
Jeśli kolejność rozpoznawania nazw jest nieprawidłowa, możesz ją zmienić w:
/etc/nsswitch.conf
Wyodrębniono z: http://www.sysadmit.com/2017/07/linux-ssh-login-lento.html
źródło
Próbowałem wszystkich odpowiedzi, ale żadna z nich nie zadziałała. w końcu odkrywam mój problem:
najpierw uruchamiam,
sudo tail -f /var/log/auth.log
żeby zobaczyć dziennik ssh, a następnie w innym uruchomieniu sesjissh 172.16.111.166
i zauważyłem, że czekampo przeszukaniu zlokalizowałem ten wiersz w / etc / ssd / ssh_config
Skomentowałem to i opóźnienie minęło
źródło
Uwaga: Zaczęło się to od samouczka „Jak debugować”, ale ostatecznie stało się rozwiązaniem, które pomogło mi na serwerze LTS Ubuntu 16.04.
TLDR : Uruchom
landscape-sysinfo
i sprawdź, czy wykonanie polecenia zajmuje dużo czasu; to wydruk informacji o systemie przy nowym logowaniu SSH. Zauważ, że to polecenie nie jest dostępne we wszystkich systemach,landscape-common
pakiet je instaluje. („Ale czekaj, jest więcej ...”)Uruchom drugi serwer ssh na innym porcie komputera, na którym występuje problem, zrób to w trybie debugowania, który nie rozwinie go i wydrukuje komunikaty debugowania:
połącz się z tym serwerem z innego komputera w trybie pełnym:
Mój klient wyświetla następujące wiersze tuż przed snem:
Googlowanie, które nie jest tak naprawdę pomocne, ale logi serwera są lepsze:
Zauważyłem, że po przejściu
UsePAM yes
naUsePAM no
ten problem został rozwiązany.Niepowiązane
UseDNS
ani żadne inne ustawienie,UsePAM
wpływa tylko na ten problem w moim systemie.Nie mam pojęcia dlaczego, a ja też nie pozostawiając
UsePAM
nano
, ponieważ nie wiem, których skutki uboczne są, ale to pozwala mi kontynuować śledztwo.Więc proszę, nie uważaj tego za odpowiedź, ale za pierwszy krok, aby dowiedzieć się, co jest nie tak.
Więc kontynuowałem badanie i uruchomiłem
sshd
zstrace
(sudo strace /usr/sbin/sshd -ddd -p 44321
). To dało następujące:Linia
/etc/update-motd.d
wzbudziła we mnie podejrzenia, najwyraźniej proces czeka na wynik tego, co jest w środku/etc/update-motd.d
Więc
cd
byłyby do/etc/update-motd.d
i prowadziłsudo chmod -x *
w celu zahamowania PAM uruchomić wszystkie pliki, które generują ten dynamicznyMessage Of The Day
, który obejmuje obciążenie systemu i jeśli pakiety muszą zostać zmodernizowane, i to rozwiązało problem.Jest to serwer oparty na „energooszczędnym” procesorze N3150, który ma dużo pracy do wykonania 24 godziny na dobę, 7 dni w tygodniu, więc myślę, że zebranie wszystkich tych danych motd było dla niego po prostu za dużo.
Mogę zacząć włączać skrypty w tym folderze selektywnie, aby zobaczyć, które są mniej szkodliwe, ale specjalne wywoływanie
landscape-sysinfo
jest bardzo wolne i50-landscape-sysinfo
wywołuje to polecenie. Myślę, że właśnie to powoduje największe opóźnienie.Po ponownym uaktywnieniem większość plików doszedłem do wniosku, że
50-landscape-sysinfo
i99-esm
były przyczyną moich kłopotów.50-landscape-sysinfo
wykonanie zajęło około 5 sekund i99-esm
około 3 sekund. Wszystkie pozostałe pliki łącznie około 2 sekund.Ani
50-landscape-sysinfo
i nie99-esm
są kluczowe.50-landscape-sysinfo
drukuje ciekawe statystyki systemowe (a także jeśli masz mało miejsca!) i99-esm
drukuje wiadomości związane zUbuntu Extended Security Maintenance
Wreszcie możesz utworzyć skrypt za pomocą
echo '/usr/bin/landscape-sysinfo' > info.sh && chmod +x info.sh
i uzyskać ten wydruk na żądanie.źródło
Wątek ten już zapewnia wiele rozwiązań, ale mojego nie ma tutaj =). Więc oto jest. Mój problem (zalogowanie się przez ssh do mojego malinowego pi zajęło około 1 minuty), był spowodowany uszkodzeniem pliku .bash_history. Ponieważ plik jest odczytywany przy logowaniu, spowodowało to opóźnienie logowania. Po usunięciu pliku czas logowania wrócił do normy, jak natychmiast.
Mam nadzieję, że pomoże to innym osobom.
źródło
Dla mnie potrzebowałem GSSAPI i nie chciałem wyłączać wyszukiwania wstecznego DNS. To po prostu nie był dobry pomysł, więc sprawdziłem stronę główną dla resolv.conf. Okazuje się, że zapora ogniowa między mną a serwerami, do których byłem SSHing, zakłócała żądania DNS, ponieważ nie były w takiej formie, jakiej oczekiwała zapora. Ostatecznie wszystko, co musiałem zrobić, to dodać ten wiersz do resolv.conf na serwerach, do których byłem SSHing:
options single-request-reopen
W pobliżuźródło
Co ciekawe, aktualizacja pakietu wiązania na CentOS 7 uległa awarii, teraz w dzienniku stwierdzono, że /etc/named.conf miał problem z uprawnieniami. Od miesięcy działał dobrze z 0640. Teraz chce 0644. Ma to sens, ponieważ nazwany demon należy do „nazwanego” użytkownika.
Po nazwaniu wszystko działało wolno, od logowania ssh do obsługi strony z lokalnego serwera WWW, powolnych aplikacji LAMP itp., Prawdopodobnie dlatego, że każde żądanie przekroczyło limit czasu na martwym serwerze lokalnym, zanim przejdzie do skonfigurowanego zewnętrznego, dodatkowego DNS.
źródło
Dla mnie wystąpił problem w moim lokalnym
/etc/hosts
pliku. Więcssh
starałem dwa różne IP (jeden niewłaściwy), które trwało wieki do time-out.Za pomocą
ssh -v
zrobił trick tutaj:źródło
/etc/hosts
Serwera?