我有一台运行 sshd 的 Cygwin 机器。当我尝试使用 SSH 登录机器时,需要一段时间才能得到响应。
使用命令ssh -v user@cygwin
,我看到有两个命令需要花费几分钟。
debug1:读取配置数据/etc/ssh_config debug1:连接到 pspc [10.0.40.177] 端口 22。 debug1:连接已建立。 debug1:身份文件/Users/smcho/.ssh/identity type -1 debug1:身份文件/Users/smcho/.ssh/id_rsa 类型-1 debug1:身份文件/Users/smcho/.ssh/id_dsa 类型 -1 <---
和
debug1:远程协议版本2.0,远程软件版本OpenSSH_5.3 调试1:匹配:OpenSSH_5.3 pat OpenSSH* debug1:启用协议 2.0 的兼容模式 debug1:本地版本字符串 SSH-2.0-OpenSSH_5.2 debug1: SSH2_MSG_KEXINIT 已发送<---
经过谷歌搜索后,我认为这是由于 Windows 端口 113 被防火墙保护造成的。(http://www.cygwin.com/ml/cygwin/2009-03/msg00380.html)
identify
我该如何解决这个问题?我该如何快速返回SSH2_...IT sent
?
答案1
除了确实向 SSH 客户端开放IDENT
端口 113(以便服务器可以尝试连接到该端口)之外,你也许会有一些运气添加 UseDNS no
到sshd_config
。
我怀疑它是否能帮助你(客户端知道在哪里找到服务器,所以它不是第一个项目符号,你尝试了第二个项目符号,并且延迟时间超过 10 秒,因此其他项目符号不适用),但对于档案OpenSSH 常见问题解答状态:
ssh(1) 需要很长时间才能连接或登录
较大的延迟(超过 10 秒)通常是由于名称解析问题引起的:
- 某些版本的 glibc(特别是 Red Hat 6.1 附带的 glibc 2.1)可能需要很长时间才能从域名解析“IPv6 或 IPv4”地址。可以通过指定
AddressFamily inet
选项ssh_config
。[在客户端上;AvB。]- 客户端或服务器可能存在 DNS 查找问题。您可以使用 nslookup 命令在客户端和服务器上检查此问题,方法是查找另一端的名称和 IP 地址。此外,在服务器上查找客户端的 IP 名称查找返回的名称。您可以通过设置禁用大多数服务器端查找
UseDNS no
在sshd_config
。[在服务器上,AvB。]少于 10 秒的延迟可能有其他原因。
- OpenSSH 3.8 之前的版本中有一个
moduli
文件,其模数比 sshd 需要的模数小,因此 sshd 最终会使用比要求的模数大得多的模数,从而导致速度下降。替换该moduli
文件将解决此问题(请注意,在大多数情况下,升级期间不会替换此文件,必须手动替换)。- OpenSSH 3.8 之前的版本存在一个缺陷,
ssh
会导致其请求的模数大于预期(与上述情况相结合会导致速度显著下降)。将客户端升级到 3.8 或更高版本将解决此问题。如果客户端或服务器缺少基于内核的随机数设备(例如 Solaris < 9、AIX < 5.2、HP-UX < 11.11)并且没有可用的替代品(例如 prngd),则可能调用的用于
ssh-rand-helper
生成熵的程序之一挂起了。可以通过在调试模式下运行它来调查此问题:在 /usr/local/libexec/ssh-rand-helper 中输入 -vvv任何重大延迟都应进行调查并纠正,或者应从 ssh_prng_cmds 中删除相应的命令。
答案2
对于您提到的第一种情况,我遇到了速度缓慢的问题。
debug1: identity file /Users/smcho/.ssh/id_dsa type -1 <---
我的 OpenSSH 版本是 5.1。我删除了旧安装并安装了 cygwin OpenSSH 5.5,速度问题已经消失。也许你可以试试这个。