连接到网络上的服务器时,我需要大约10秒的时间才能得到密码提示。当我连接到另一台服务器时(例如。GitHub),反应非常快。
通过一些研究,似乎导致服务器响应缓慢的常见原因是反向DNS和GSSAPI功能。我已经在服务器上分别禁用了这两种设备,而且这两种更改都没有改善这种情况。
$ ssh -v <hostname>
<a bunch of stuff about reading configs, connecting and reading key files>
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.3
<a long wait - 5-10 seconds>
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH_5* compat 0x0c000000
<many more messages, get to login very quickly>使用相同的OpenSSH 5.3的两个服务器之间的连接也会快速进行。
基于上述,我认为存在某种形式的协议协商。我理解得对吗?我是否可以强制特定客户端或服务器的某个协议来加快服务器响应时间?
发布于 2016-09-19 15:10:21
我的问题似乎不是由于SSH,而是由于tcp_wrappers规则处理的延迟。感谢@BillThor为我指出正确方向的评论。使用%u替换(或user@host规则)会导致tcp包装程序尝试向客户端计算机发出IDENT/auth请求,试图获取连接者的用户名。在我的示例中,客户机上没有服务器,因此tcp包装程序在继续允许连接之前等待请求超时。
我发现问题不是SSH的问题,而是想了解服务器端发生的事情的更多细节。
首先,我使用ssh -L 8080:localhost:8080 <hostname>登录到服务器。这在SSH连接上创建了一个隧道,它将我的机器上的端口8080转发到服务器上的8080。
接下来,我在调试模式下启动了第二个SSH服务器,侦听端口8080:sudo /usr/sbin/sshd -d -p 8080。当登录到我的调试服务器时,一切都很顺利和快速!
发布于 2016-09-16 15:31:09
正如您所述,这种错误通常是由于DNS查找和GSSAPI功能造成的。
在过去遇到同样的问题之后,我将再次检查语法以禁用这些特性,因为语法可能会从一个操作系统更改到另一个操作系统。
作为示例,LookupClientHostnames=no适用于一些Solaris版本。还有,在/etc/host中包含条目可能会有所帮助。
https://serverfault.com/questions/803549
复制相似问题