问题描述
当我登录我的服务器时,我得到这个:
No mail.
Last login: Fri Nov 5 14:22:45 2010...
然后我必须等待 5 秒,然后就准备好了…
wolfy@ubuntu-server:~$
这个等待时间是正常的还是我应该对 “repair” 做些什么?
最佳方案
这通常是 pam_motd
重新生成 /etc/motd
文件的结果。您可以检查 /etc/update-motd.d
中的各个脚本,看看是否有特别慢的地方。
次佳方案
我对 10.04 (LTS) 也有同样的问题。
当我用 -vvv
运行我的 ssh 时,它死在:
debug1: Entering interactive session.
扩展这个答案。
我设法远程重新启动服务器并启用调试登录。还利用这个机会保持登录状态并观察其他登录尝试。这是发生的事情。客户端连接授权并挂在上述消息。
在服务器上,进程列表显示:
root 835 0.0 0.1 11476 3348 ? Ss 13:39 0:00 sshd: till [priv]
root 840 0.0 0.0 4804 1124 ? S 13:39 0:00 /bin/sh -c /usr/bin/env -i PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin /bin/run-parts --lsbsysinit /etc/update-motd.d
root 841 0.0 0.0 4728 1108 ? S 13:39 0:00 /bin/run-parts --lsbsysinit /etc/update-motd.d
root 854 0.0 0.0 4804 1144 ? S 13:39 0:00 /bin/sh /etc/update-motd.d/50-landscape-sysinfo
root 861 0.2 0.5 15388 9248 ? S 13:39 0:00 /usr/bin/python /usr/bin/landscape-sysinfo
root 863 0.0 0.0 0 0 ? Z 13:39 0:00 [who] <defunct>
我可以在登录时很好地执行 /usr/bin/python /usr/bin/landscape-sysinfo
,但由于某种原因,我无法弄清楚为什么它会阻止登录过程。当我杀死进程时,登录继续提示并成功。
这似乎不是 ssh(d) 问题,它与 update-motd
和景观更相关。我卸载了 update-motd
包,但似乎 /etc/update-motd
目录仍然存在并且脚本仍在执行 – 导致进程挂起。
进一步调试:
原来 /etc/update-motd.d/
目录并不真正属于 update-motd
包,它似乎是由通过 sshd 的 pam 身份验证触发的。
我好像搞定了!
在以下文件中禁用 pam_motd:
-
/etc/pam.d/sshd
-
/etc/pam.d/login
多一个:
apt-get purge landscape-client landscape-common
这些似乎在一定程度上有所帮助。但是,它只删除 /etc/update-motd.d/
中的有问题的脚本,既不删除该目录中的所有脚本,也不删除 pam_motd
。
一般来说,我发现没有办法完全禁用 pam_motd
,因为它似乎在一定程度上减慢了登录过程。它不像 landscape-common
中的脚本那样阻塞,但速度较慢。
关于这个问题的错误报告:
从那里解决方法:
You are right that the ability to log in is more important than presenting a motd. If this behavior is a problem for you, there are several ways that you can disable it:
- comment out the ‘pam_motd’ line in
/etc/pam.d/sshd
if you don’t want to display a motd.- delete the contents of the
/etc/update-motd.d
directory.- chmod -x the scripts in
/etc/update-motd.d
that you don’t want to run.
第三种方案
最后自己找到了解决方案:
-
sudo apt-get remove landscape-client landscape-common
-
/etc/pam.d/login
和/etc/pam.d/sshd
中的注释行session optional pam_motd.so
现在登录是即时的!
第四种方案
根据您的描述,这听起来更像是网络问题。诊断:
-
使用 -v 参数运行 ssh 以显示详细信息。
-
尝试对您正在连接的 SSH 服务器运行 ping,看看这是否也同时挂起。
-
尝试其他类型的传输到同一台服务器。例如,带有 –limit-rate 参数的 wget 通过 HTTP 获取文件并让它花费足够长的时间以触发 “hanging” 行为。
-
查看它是否仅在空闲时挂起,或者即使您此刻正在做某事。如果它在空闲时挂起,-v 诊断可能会告诉您,在这种情况下,使用 keepalive 的建议可能会有所帮助 (ssh -o “TCPKeepAlive yes”)
如果您可以与 Windows 和 PuTTY 连接正常,则这可能不是服务器端的问题。
第五种方案
如果 PermitEmptyPassword
和 UsePAM
都启用,OpenSSH 服务器总是尝试使用空密码进行身份验证,这表明相关帐户不需要身份验证。它会在两种协议中的身份验证过程开始时立即执行此操作,并且不会响应来自客户端的任何 “real” 身份验证请求。如果设置了 sshd_config 标志 PermitEmptyPassword
,OpenSSH 将只允许此类访问;不幸的是,代码的编写方式在任何情况下都会执行密码测试,因此向 PAM 显示为失败。
所以:禁用 PermitEmptyPassword
或 UsePAM
,但请记住:没有 PAM,没有密钥将无法登录。
参考:https://groups.google.com/forum/?fromgroups=#!topic/comp.security.ssh/wExY8lWlG-c