Назад | Перейти на главную страницу

ssh-соединение запускается бесконечно, застрял на «pledge: network»

Подключение к одному из моих серверов с использованием ssh занимает более 20 секунд.

Это не связано с условиями LAN или WAN, поскольку соединение с самим собой требует того же (ssh localhost). После того, как соединение окончательно установлено, взаимодействие с сервером происходит очень быстро.

Использование -vvv показывает, что соединение зависает после того, как вы произнесете "pledge: network". На этом этапе аутентификация (здесь с использованием ключа) уже выполнена, как показано здесь:

...
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), nerver нашел решение, и проблема исчезла через некоторое время ...

sshd_config - это файл по умолчанию, предоставляемый Ubuntu.

Пока я пробовал:

Вероятно, это проблема с D-Bus и systemd. Если dbus служба перезапущена по какой-то причине, вам также нужно будет перезапустить systemd-logind.

Вы можете проверить, действительно ли это проблема, открыв журнал демона ssh (в 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).

нашел ответ:

изменил UsePAM с да на нет в файле sshd_config

После перезапуска службы ssh соединение с сервером устанавливается немедленно. На этом сервере PAM связан с ldap, поэтому, вероятно, это причина, даже если здесь я подключаюсь к пользователю, объявленному на самом сервере, а не к LDAP.

Что ж, это скорее способ обойти проблему, а не решение ... У меня есть другие серверы, настроенные таким же образом, которые не имеют этой проблемы.

Надеюсь, это может кому-то помочь ...

Это произошло на двух моих серверах Fedora 25 из-за множества неудачных попыток входа в систему по SSH.

(Общие предложения по использованию GSSAPIAuthentication=no и UseDNS=no, или перезапуск systemd-logind, не имело никакого значения.)

На этих серверах /etc/pam.d/postlogin содержит:

session     optional      pam_lastlog.so silent noupdate showfailed

Страница руководства для pam_lastlog объясняет, что showfailed вариант будет:

Отображение количества неудачных попыток входа в систему и даты последней неудачной попытки из btmp.

На этих серверах /var/log/btmp файлы были огромными из-за множества неудачных попыток входа в систему. В btmp файлы журналов тоже не вращались.

Я установил logrotate package, чтобы файлы журналов в будущем менялись. (В Fedora конфигурация, поставляемая с logrotate обрабатывает вращение /var/log/btmp.)

Я также удалил огромное btmp лог-файлы; как только я это сделал, подключение к серверам снова стало мгновенным.

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

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

echo "" > /var/log/btmp

и посмотрите, поможет ли это.

На Ubuntu 16+ я каждый раз видел ssh -v XXX@YYY торможение в pledge: network это можно исправить, следуя инструкциям, которые я нашел здесь Подробное руководство по исправлению медленных входов в систему по SSH. В частности, задержку вызывает дополнительный модуль PAM, который, по всей видимости, не нужен.

В /etc/pam.d/common-session на машине, на которой вы видите медленный вход (например, сервер). Закомментируйте строку session optional pam_systemd.so. Это должно немедленно решить проблему.

Это позволяет избежать полного выключения PAM, что приводит к повреждению входа в систему с паролями.

В моем случае причиной был сбой rsyslogd. Я узнал об этом, потому что больше не было сообщений журнала, например. / var / log / syslog или /var/log/mail.log

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

Для меня первая подсказка была предоставлена

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

Это показало, что моя конфигурация DNS была неправильной (у меня была опечатка в адресе DNS). После фиксации IP и восстановления настройки UseDNS yes все работало нормально.

Я заметил следующую строку в своем отзыве об отладке:

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

Этот файл принадлежал root:root пока я jenkins. Удаление этого файла решило мои проблемы.

Проблема для меня (Ubuntu 19.10) заключалась в том, что мои:

/etc/pam.d/sshd

# Print the message of the day upon successful login.
# This includes a dynamically generated part from /run/motd.dynamic
# and a static (admin-editable) part from /etc/motd.
session    optional     pam_motd.so  motd=/run/motd.dynamic
session    optional     pam_motd.so noupdate

Комментируя настройки motd, я сразу понял.

В моем случае это связано с тем, что журналов слишком много. Вы можете проверить, в порядке ли вы, выполнив эту команду:

sudo journalctl --list-boots

Если требуется время, чтобы дать результаты и дать много строк результата, тогда вы в деле.

Чтобы обрезать журналы, сделайте следующее:

sudo journalctl --vacuum-time 2d

Он удалит журналы старше двух дней.