Примечание: это началось как учебное пособие «Как отлаживать», но в итоге оказалось решением, которое помогло мне на сервере Ubuntu 16.04 LTS.
TLDR : запустите landscape-sysinfoи убедитесь, что выполнение этой команды занимает много времени; это распечатка информации о системе при новом входе в систему по SSH. Обратите внимание, что эта команда доступна не на всех системах, landscape-commonпакет устанавливает ее. («Но подождите, есть еще ...»)
Запустите второй ssh-сервер на другом порту на машине, на которой возникла проблема, сделайте это в режиме отладки, который не заставит его работать и выведет отладочные сообщения:
sudo /usr/sbin/sshd -ddd -p 44321
подключиться к этому серверу с другого компьютера в подробном режиме:
ssh -vvv -p 44321 username@server
Мой клиент выводит следующие строки прямо перед началом сна:
debug1: Entering interactive session.
debug1: pledge: network
Поиск в Google не очень полезен, но журналы сервера лучше:
debug3: mm_send_keystate: Finished sending state [preauth]
debug1: monitor_read_log: child log fd closed
debug1: PAM: establishing credentials
debug3: PAM: opening session
---- Pauses here ----
debug3: PAM: sshpam_store_conv called with 1 messages
User child is on pid 28051
Я заметил, что когда я перехожу UsePAM yesна UsePAM noто, эта проблема решена.
Не относится ни к UseDNSкаким другим настройкам, UsePAMвлияет только на эту проблему в моей системе.
Я понятия не имею , почему, и я также не выходя UsePAMна no, потому что я не знаю , какие побочные эффекты, но это позволяет мне продолжать расследование.
Поэтому, пожалуйста, не рассматривайте это как ответ, а как первый шаг, чтобы начать выяснять, в чем дело.
Поэтому я продолжил расследование и побежал sshdс strace( sudo strace /usr/sbin/sshd -ddd -p 44321). Это привело к следующему:
sendto(4, "<87>Nov 20 20:35:21 sshd[2234]: "..., 110, MSG_NOSIGNAL, NULL, 0) = 110
close(5) = 0
stat("/etc/update-motd.d", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
umask(022) = 02
rt_sigaction(SIGINT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN, [], SA_RESTORER, 0x7f15dce784b0}, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
clone(child_stack=0, flags=CLONE_PARENT_SETTID|SIGCHLD, parent_tidptr=0x7ffde6152d2c) = 2385
wait4(2385, # BLOCKS RIGHT HERE, BEFORE THE REST IS PRINTED OUT # [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 2385
Строка /etc/update-motd.dзаставила меня заподозрить, по-видимому, процесс ждет результата от материала, который находится в/etc/update-motd.d
Поэтому я cdпопробовал /etc/update-motd.dи запустил sudo chmod -x *PAM, чтобы запретить PAM запускать все файлы, которые генерируют эту динамику Message Of The Day, включая загрузку системы и необходимость обновления пакетов, и это решило проблему.
Это сервер, основанный на «энергосберегающем» процессоре N3150, который имеет много работы 24/7, поэтому я думаю, что собирать все эти motd-данные было слишком много для него.
Я могу начать выборочно включать сценарии в этой папке, чтобы увидеть, какие из них менее вредны, но, в частности, вызов landscape-sysinfoочень медленный и 50-landscape-sysinfoвызывает эту команду. Я думаю, что именно это вызывает наибольшую задержку.
После повторного включения большинства файлов я пришел к выводу, что это
50-landscape-sysinfoи 99-esmстало причиной моих неприятностей. 50-landscape-sysinfoВыполнение заняло около 5 секунд и 99-esmоколо 3 секунд. Все остальные файлы около 2 секунд в целом.
Ни 50-landscape-sysinfoи 99-esmне являются решающими. 50-landscape-sysinfoраспечатывает интересную системную статистику (а также если у вас мало места!) и 99-esmпечатает сообщения, связанные сUbuntu Extended Security Maintenance
Наконец, вы можете создать скрипт echo '/usr/bin/landscape-sysinfo' > info.sh && chmod +x info.shи получить эту распечатку по запросу.