我的 Linux(UbuntuEEE) 到 Linux(CentOS) ssh 在使用私有接口时需要很长时间才能登录(~15 秒),但在使用公共接口时则不需要。
我有一个 Linux 机器充当我的路由器。因此,它有多个接口(75.xxx.xxx.xxx,192.168.1.1)。我可以从内部接口(192.168.1.65 到 .1)ssh 进入,但这需要一段时间。我可以通过 ssh 进入公共地址,而且速度很快(约 1 秒)。
我有另一个盒子,我可以通过 ssh 进入内部界面,而且它运行得很快。
iptables 设置为立即接受进入接口的数据包。sshd 的 UseDNS 正常开启;如果我关闭它并重新启动 sshd,我会遇到同样的问题。我通常使用公钥认证;我已经做了一个mv ~/.ssh/ ~/ssh/
,它会在慢慢地向我询问密码。
登录后(使用任一界面),速度很快。
ssh 客户端版本(通过ssh -v
):OpenSSH_4.7p1 Debian-8ubuntu1.2,OpenSSL 0.9.8g 2007 年 10 月 19 日
ssh 服务器版本(通过rpm -qv openssh_server
):openssh-server-4.3p2-29.el5
在您的 /etc/ssh/sshd_config 中设置它并重新启动守护程序,这应该可以解决问题。
这种问题总是由DNS引起的。当您登录 192.168.1.1 接口时,sshd 会尝试查找您来自的任何 IP 地址,但它不能。
当您认为 UseDNS 已设置为“否”时,再次运行此实验。
我的猜测是在将 UseDNS 更改为 no 后,您将 SIGHUP 发送到了错误的 sshd。
反过来
/etc/ssh/sshd_config
,它会尝试对您的内部 IP 地址进行 rDNS 查找。“VerifyReverseMapping 否”
在客户端和服务器上使用 strace -p 来确定 ssh/sshd 进程正在等待什么。
不确定它可能是什么 - 延迟通常是由 DNS 反向查找引起的,但您说您已经关闭了它。
strace 是 Dave 提到的一个选项,但我会尝试在登录时在客户端上启用详细程度。您可以通过提供 -v 开关(最多 3 次以获得最大详细程度)来做到这一点,例如:
在 Alex 的建议下,我运行了一个数据包嗅探器,发现客户端正在执行 DNS 查找。作为测试的短期解决方案,我添加
192.168.1.1 servername
到客户的/etc/hosts
文件中,事情进展得很快。