当前位置: 首页>>技术教程>>正文


server – 登录等待时间长

, , ,

问题描述

当我登录我的服务器时,我得到这个:

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.

第三种方案

最后自己找到了解决方案:

  1. sudo apt-get remove landscape-client landscape-common

  2. /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 连接正常,则这可能不是服务器端的问题。

第五种方案

如果 PermitEmptyPasswordUsePAM 都启用,OpenSSH 服务器总是尝试使用空密码进行身份验证,这表明相关帐户不需要身份验证。它会在两种协议中的身份验证过程开始时立即执行此操作,并且不会响应来自客户端的任何 “real” 身份验证请求。如果设置了 sshd_config 标志 PermitEmptyPassword,OpenSSH 将只允许此类访问;不幸的是,代码的编写方式在任何情况下都会执行密码测试,因此向 PAM 显示为失败。

所以:禁用 PermitEmptyPasswordUsePAM ,但请记住:没有 PAM,没有密钥将无法登录。

参考:https://groups.google.com/forum/?fromgroups=#!topic/comp.security.ssh/wExY8lWlG-c

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/12357.html,未经允许,请勿转载。