注意:本教程起初是“如何调试”的教程,但最终成为在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
谷歌搜索并没有真正的帮助,但是服务器日志更好:
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运行所有生成此dynamic的文件Message Of The Day
,其中包括系统负载以及是否需要升级软件包,从而解决了该问题。
这是一台基于“节能” N3150 CPU的服务器,它有很多工作要做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
并根据要求获取该打印输出。