我有一台 Ubuntu 9.04 服务器。我在通过 SSH 连接服务器时遇到了长时间延迟。我在 sshd_conf 中添加了“UseDNS no”,并在 ssh_conf 中注释掉了“GSSAPIAuthentication yes”,但问题仍然存在。
一看/etc/resolve.conf
,问题就出在这里。
内容/etc/resolve.conf
:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 10.xx.xx.xx
nameserver 10.xx.xxx.xx
search xyz.com
我在某处读到过,此处的多个名称服务器条目可能会导致问题。我在该服务器上使用 VPN 客户端连接到我公司的网络,看起来这些条目是由 VPN 客户端自动添加的。
如何在不中断 VPN 客户端/连接的情况下解决这些长时间延迟问题。我不介意从我的服务器通过 VPN 连接时无法使用我公司的服务器名称/别名,但我想修复连接到服务器时的长时间 SSH 延迟问题。
===========================
是的,我的意思是 /etc/sshd_conf
我正在使用 IP 地址直接连接
我没有使用 VPN 连接到我的服务器(存在延迟)。但是,服务器上正在运行 VPN 客户端以进一步连接到其他网络。使用 VPN 客户端从我的服务器登录速度足够快。
抱歉,我不明白 AddressFamily、inet 和其他一些评论。
以下是客户端的调试日志(大约有延迟):
OpenSSH_5.6p1, OpenSSL 0.9.8o 01 Jun 2010
debug1: Connecting to ......
debug1: Connection established.
debug1: identity file ..... type -1
debug1: identity file ..... type -1
debug1: identity file ..... type -1
debug1: identity file ..... type -1
现在暂停 4 秒
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1p1 Debian-5ubuntu1
debug1: match: OpenSSH_5.1p1 Debian-5ubuntu1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
现在有 15-20 秒的暂停
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
现在有 40-50 秒的暂停
然后它检查指纹等并快速连接。
答案1
sshd_conf
只是为了确定你真的想/etc/ssh/sshd_config,而不是 sshd_conf,对吗?我认为 sshd_conf 或 sshd.conf 不是 Ubuntu 上 OpenSSH 的有效文件,因此编辑它们不会有任何作用。
我从某处读到过,此处的多个名称服务器条目可能会导致问题。
/etc/resolv.conf 中的多个名称服务器不会造成任何问题,但如果列表中的第一个名称服务器速度较慢,则会影响您的系统。事实上,在 /etc/resolv.conf 中列出冗余名称服务器是一种很好的做法,以防一个名称服务器出现故障。
在深入挖掘之前,请尝试确定该问题出在客户端还是服务器端。
在客户端,打开 SSH 详细模式。这将告诉您客户端与服务器的连接进度。如果从客户端到服务器的连接速度很慢,您可能会在出现“debug1:已建立连接。”或“debug1:服务器接受密钥:pkalg ssh-dss blen 435”等行之前看到延迟。
在服务器端,在单独的窗口中跟踪 SSH 日志并查看日志。您可能希望将日志记录增加到“VERBOSE”。
更新:
不要使用 sshd_conf。将以下内容添加到 /etc/ssh/sshd_config ,重新启动 SSH,然后让我们知道发生了什么。
UseDNS no
每次只改变一件事。如果 UseDNS 不起作用,请尝试“GSSAPIAuthentication no”。
答案2
您应该能够在 ~/.ssh/config 中创建自己的用户级配置文件
从这里,您可以将主机映射到数字 IP,这样它应该会完全绕过 DNS 查找。例如,假设您想通过 ssh 连接到“glitch.somewhere.net”,请在您的配置文件中执行以下操作:
Host glitch
HostName 192.168.0.1
User JP19
您可以在此处插入大量选项,如 ssh_config 手册页 (man ssh_config) 中所述。这里的关键是“HostName”实际上设置为数字 IP,而不是真正的主机名。本质上,您正在设置多个快捷方式。因此,您可以 ssh 到 glitch1、glitch2、goog……
一个潜在的陷阱是确保权限设置正确,这样 ssh 才不会崩溃。另外,我建议以详细模式 (ssh -vvv) 运行 ssh,以确保它挂在您认为的位置,但我认为您的思路是正确的。
答案3
第一个问题,您是通过 IP 地址还是通过域名连接到服务器?
第二个问题,您可以从外部连接到服务器,还是只能通过 VPN 连接到服务器?
延迟的可能原因是 VPN 和连接速度,不一定是 SSH 连接的结果。
答案4
问题
我在用 Fedora 笔记本电脑登录 CentOS/Fedora 服务器时也遇到了类似的问题。从外部网络连接时,登录过程很快,在密码提示出现之前会有两秒甚至三秒的延迟。但是,从内部网络连接时,需要 10-20 秒才能到达密码提示。
解决方案:
编辑 ~/.ssh/config
Host 192.168.0... (your target ip)
GSSAPIAuthentication no
PasswordAuthentication yes
ChallengeResponseAuthentication no
ForwardX11 yes
确保 ~/.ssh/config 权限对于组/其他人来说是只读的,对于用户来说是只写的。(chmod 为 644)。