ssh-зв’язок займає назавжди, щоб започаткувати, застрягши в "заставі: мережа"


44

Для підключення до одного з моїх серверів за допомогою ssh потрібно більше 20 секунд.

Це не пов’язано з умовами локальної мережі або WAN, оскільки підключення до себе займає те саме (ssh localhost). Після того, як з'єднання буде остаточно встановлено, дуже швидко взаємодіяти з сервером.

Використання -vvv показує, що з'єднання застрягло після вимови "застава: мережа". На даний момент аутентифікація (тут за допомогою ключа) вже зроблена, як видно тут:

...
debug1: Authentication succeeded (publickey).
Authenticated to myserver.mydomain.com ([xx.xx.xx.xx]:22).
debug1: channel 0: new [client-session]
debug2: channel 0: send open
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network

(... застряг тут на 15-25 секунд ...)

debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug2: callback start
debug2: fd 3 setting TCP_NODELAY
debug2: client_session2_setup: id 0
...

Сервер - Ubuntu 16.04. Це вже траплялося зі мною в минулому з іншим сервером (був Ubuntu 12.04), нервер знайшов рішення, і проблема через деякий час відмінилася ...

sshd_config - типовий, який надає Ubuntu.

Поки я намагався:

  • використовуючи -o GSSAPIAuthentication = ні в команді ssh
  • використовуючи пароль замість ключа
  • використовуючи UsePrivilegeSeparation ні, а не так, в sshd_config

1
Зазвичай для мене повільні SSH-з'єднання - це проблеми з DNS, можливо, тут справа? Наприклад, сервер може застряг, намагаючись зробити зворотний DNS для IP-адреси клієнта і чекає, коли цей час
вимкнеться

Насправді ні: за замовчуванням UseDNS не визначено в sshd_config, а сторінка man каже, що ця опція за замовчуванням є "ні".
M-Jack

3
Деякі з gogling припускають, що це може бути викликано оновленням системи без перезавантаження. І 12 липня відбулося системне оновлення для xenial . systemctl restart systemd-logindвирішує проблему лише на короткий проміжок часу для мене.
Іван Козик

Або якщо ви бачите, pam_systemd(sshd:session): Failed to create session: Connection timed outяк згадується у відповіді, це може бути github.com/systemd/systemd/isissue/2925
Іван Козик

Я прийшов сюди, маючи цю проблему після оновлення, і пропозиція @ IvanKozik виправила проблему - тобто перезапуск systemctl systemd-logind - тож спасибі за це.
Пол М

Відповіді:


43

Це, мабуть, проблема з D-Busі systemd. Якщо dbusпослуга з якоїсь причини перезапущена, вам також знадобиться перезапустити systemd-logind.

Ви можете перевірити, чи це проблема, відкривши журнал ssh daemon (на Ubuntu це має бути /var/log/auth.log) і перевірити, чи є в ньому такі рядки:

sshd[2721]: pam_systemd(sshd:session): Failed to create session: Connection timed out

Якщо так, просто перезапустіть systemd-logindслужбу:

systemctl restart systemd-logind

У мене був такий самий випуск на CentOS 7, тому що messagebusперезапущено (саме так D-Busназивається сервіс у CentOS).


Я спробував перезапустити systemd-logind, але через деякий час він каже, що демон PolicyKit відключений від шини. Ми більше не є зареєстрованим агентом аутентифікації. Не вдалося виконати роботу для systemd-logind.service через перевищення тайм-ауту. Докладніше див. У "systemctl status systemd-logind.service" та "journalctl -xe".
Кун Рен

@KunRen вам, ймовірно, потрібно перезапустити polkitслужбу за допомогою systemctl restart polkit.
Strahinja Kustudic

16

знайшов відповідь:

змінив UsePAM з "Так" на "ні" у файлі sshd_config

Після перезапуску служби ssh з'єднання зараз негайно до сервера. На цьому сервері PAM пов'язаний з ldap, тому, ймовірно, це причина, навіть якщо тут я підключаюсь до користувача, заявленого на самому сервері, а не LDAP.

Ну, це більше спосіб обійти проблему, насправді не вирішити ... У мене є інші сервери, налаштовані так само, як у них немає цієї проблеми.

Сподіваюся, це може комусь допомогти ...


1
зміна UsePAM на "ні" не має інших наслідків. Дивіться цю дискусію. Тому мені довелося встановити пароль користувачеві, тому що у мене виникли помилки, такі як користувацькі nagios не дозволені, оскільки обліковий запис заблоковано
M-Jack

4
Це справді не дуже гарна ідея.
Jakuje

1
чому ?? будь-яка альтернатива?
M-Jack

8
PAM використовується для інших речей навколо управління рахунками в сучасних системах. Замість того, щоб вимкнути це, вам краще буде вивчити, що відбувається в стеці PAM і чому це займає так довго.
Jakuje

Залишивши часто використовуваний модуль PAM, включений для доступу до SSH, це отвір для безпеки. Обмеження доступу до критичних служб, таких як SSH з точки зору безпеки, завжди є хорошою ідеєю для будь-яких інших служб. Коли ви хочете, щоб модуль PAM співпрацював з SSH? Наприклад: коли вам потрібно інтегрувати його з активним каталогом через winbind, коли вам потрібно два факторного аутентифікації з маркерами google тощо. В інших випадках (при використанні passwd та тіні) відключення його абсолютно безпечно. Кожен користувач PAM повинен побачити це: cve.mitre.org/cgi-bin/cvekey.cgi?keyword=pam
Міхал Соколовський

10

Це сталося на двох моїх серверах Fedora 25, і це було пов’язано з безліччю невдалих спроб входу в SSH.

(Загальні пропозиції щодо використання GSSAPIAuthentication=noта UseDNS=noперезавантаження systemd-logindне мали значення.)

На цих серверах /etc/pam.d/postloginміститься:

session     optional      pam_lastlog.so silent noupdate showfailed

Сторінка "man" для pam_lastlogпояснює, що showfailedпараметр:

Відобразити кількість невдалих спроб входу та дату останньої невдалої спроби від btmp.

На цих серверах /var/log/btmpфайли були величезними через багато невдалих спроб входу. В btmpлог - файли не були повернені або.

Я встановив logrotateпакет, щоб забезпечити повернення файлів журналів у майбутньому. (У Fedora - конфігурація, що постачається з logrotateручками обертання /var/log/btmp.)

Я також видалив величезні btmpфайли журналів; як тільки я це зробив, підключення до серверів знову було миттєвим.


Це вирішило мою проблему! Дякую. Гарний улов. SSH займав 5-10 секунд, і тепер це не менше миготіння очей. Це в VM, який я роками підключався до публічного Інтернету. Його правила брандмауера, можливо, можна було б налаштувати трохи краще, тепер, коли я думаю про це. Для інших це все, що я зробив: sudo truncate -s 0 /var/log/btmp- Міна була розміром 2,7 г.
Карл Беннетт

2

У моєму випадку причиною став збій rsyslogd. Я виявив це, тому що більше не було повідомлень журналу в напр. / Var / log / syslog або /var/log/mail.log

Так service rsyslog restartвирішили проблему для нас.


Така ж причина на нашому сервері під управлінням CentOS 6.10. Перезапуск rsyslog подбав про це. Справа в тому, що він не був мертвий. Він бігав, але, мабуть, нічого корисного не робив.
UtahJarhead

1

Для мене ця проблема викликана великим (сотнями МБ) btmpфайлом. Цей файл реєструє спроби входу. Коли люди намагаються змусити ваш пароль, цей файл може бути великим і спричинити затримки у "pledge: network"фазі.

Спробуйте очистити файл журналу

echo "" > /var/log/btmp

і подивіться, чи допомагає це.


3
Для цього потрібно набагато більше пояснень. Для початку, чому ви вважаєте, що це корисно?
Свен

порада: Просто введення тексту :> /var/log/btmpробить те саме, що й до речі.
Маріус

1

Для мене рішення було додаванням

UseDNS no

до, /etc/ssh/sshd_configа потім звичайно service ssh restart(на нашому сервері Debian / Jessie). Більш нічого...

перед :

ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 13.440 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 20.990 total
ssh git@git.*****.de true  0.03s user 0.02s system 0% cpu 31.114 total
ssh git@git.*****.de true  0.03s user 0.01s system 0% cpu 25.898 total

після :

ssh git@git.*****.de true  0.03s user 0.02s system 5% cpu 0.832 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.523 total
ssh git@git.*****.de true  0.03s user 0.01s system 7% cpu 0.574 total

Ні, додавання UseDNS no- це рішення зовсім іншої проблеми.
kasperd

@kasperd Це не має значення. У моєму випадку у мене були ті самі симптоми (коротко: застряг після того, як сказати "застава: мережа"), і ось, що нарешті допомогло, тож це рішення принаймні дуже подібної проблеми, і я впевнений, що це допоможе одному чи інші в якийсь момент.
tamasgal

Тут же дві підвішені під час з'єднання, одна після sign_and_send_pubkey, довша після pledge: network. Додавання лише UseDNS noз наступним service ssh restartвирішило проблему на старій установці Ubuntu 14.04.5 LTS тут.
Хаунд

0

У відгуку про налагодження я помітив наступний рядок:

Control socket connect(/var/lib/jenkins/.ssh/USER@HOST:22): Permission denied

Який файл був власником, root:rootпоки я jenkins. Видалення цього файлу вирішило мої проблеми.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.