ssh соединение требует вечности для инициации, застрял на "залог: сеть"

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

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

sshd_config - это стандартная версия, предоставляемая Ubuntu.

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

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

14 ответов

Это, вероятно, проблема с 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 пакет, чтобы гарантировать, что файлы журнала будут вращаться в будущем. (На Fedora конфигурация, которая поставляется с logrotate обрабатывает вращение /var/log/btmp.)

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

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

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

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

Проблема для меня (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, я сразу понял.

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

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

echo "" > /var/log/btmp

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

Для меня решение было добавить

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

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

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

В моем случае это была проблема с брандмауэром после обновления до Debian 11.

Решено добавлением:

      iptables -t filter -A INPUT -i lo -j ACCEPT

В начале скрипта брандмауэра.

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

sudo journalctl --list-boots

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

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

sudo journalctl --vacuum-time 2d

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

Если вы используете NIS/YP, убедитесь, что nscd запущен. В моем случае при входе по ssh я получал следующее.

systemd-logind[30061]: do_ypcall: clnt_call: RPC: невозможно отправить; errno = Операция не разрешена

Согласно https://github.com/systemd/systemd/issues/7074, nscd должен быть запущен для обеспечения бесперебойной работы.

После того, как я запустил nscd (который не работал после обновления Ubuntu), входящие сеансы ssh стали намного быстрее.

У меня возникла та же проблема, и мы настроили службу SSSD для входа в AD.

Остановка службы SSSD решила проблему для меня.

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

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

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

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

Итак, я перезапустил службу rsyslog, перезапуск решил проблему для нас.

Другие вопросы по тегам