作者:U友50081205_653 | 来源:互联网 | 2017-11-17 04:28
如果是ssh到远程主机,由于网络快慢等诸多因素,慢一点是很正常的;但如果ssh到本地的某一台主机,也需要等待30s左右,就让人有些无法忍受了!
自从使用debian(版本lenny,以前使用ubuntu6.06时候并没有这个问题)以来,这个问题就存在了,但一直没有时间来解决(或是有尝试过,但失败了),今天终于忍耐不住,到debian mailing-list上问了一下,然后结合自己的实践,基本有些结论了!
根据网上的帖子以及各位网友的提议,感觉这个问题的解决方法好像并不是通用的。不过也没关系,所涉及修改的也就那么几处,如果遇到类似问题,都尝试一下应该就能找到解决的方法了!
我的问题症状: ssh lan_host,需要等待至少30秒才能看到Password的输入提示(网上说这是因为dns反查所造成的);
我的解决方法:需要修改两个配置文件,/etc/resolv.conf 和 /etc/nsswitch.conf
在/etc/resolv.conf里面配置一个正式点dns,原来使用的是192.168.1.1,上网是没有问题的,但这里需要改成一个类似222.xx.xx.xx的域名才行;(我对域名这块没怎么研究,不知道该如何正确表述)
对于/etc/nsswitch.conf,需要将:“hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4” 改成 "hosts: files dns",这种修改,相当于禁止掉了mdns的使用,而只使用dns进行解析;
然后重启sshd服务。
关于mdns:主要是用来解决zeroconf的问题,一般用于局域网内来解析主机名。在linux中的实现是,每个主机运行一个mdns的daemon,让客户地查询的时候,返回自己的主机名。譬如你的主机名叫做abc,那么如果你在nsswitch.conf里面配置了需要支持mdns解析的话,那么你就可以通过ping abc.local, ssh abc.local等来访问这个机器。其实实质上应该是gethostbyname那里读取了nsswitch.conf,然后调用相应的实现来获取地址的。它的好处是,不用配置。(更多详情可参见: http://www.multicastdns.org/)
网上关于该问题的常用解决方法是(主要就是修改配置文件/etc/ssh/sshd_config):
(1)修改"UseDNS"的值为“no”(没有的添加该配置选项,注释掉的放开即可);这种修改在我的系统里面好像没起作用!
(2)修改“GSSAPIAuthentication”的值为“no”(没有的添加该配置选项,注释掉的放开即可);
其实用户可以自己运行“ssh -v host”进行debug的,通过debug信息就可以看到连接到什么地方被耽搁了;我的测试就是在"debug1: Unspecified GSS failure. Minor code may provide more information" 这里停顿了一会儿,所以感觉修改“GSSAPIAuthentication”的值应该会有效果,但实践证明,如果不改上面几项,该处更改在我的系统依然不起作用!