现在连接 linux 服务器一般都是使用 SSH 远程连接的方式最近新装了一台服务器, 发现 telnet 时速度很快, ping 时一切也正常, 但 SSH 连接的时候却很慢经过网上资料查询, 大致是有以下几种原因:
1SERVER 的 SSHD 会去 DNS 查找访问的 CLIENT IP 的 HOSTNAME, 如果 DNS 不可用或者没有相关记录, 就会消耗一段时间
2 在 authentication gssapi-with-mic 有时候也会消耗一段时间
一测试查找具体原因:
1 使用 ssh -v host 进行 debug
# ssh -v 192.168.100.10
然后就会输出一大堆 debug, 通过 debug 信息就可以看到连接到什么地方被耽搁了
比如会显示如下信息:
- [html] view plain copy
- debug1: Next authentication method: gssapi-with-mic
- debug1: Unspecified GSS failure. Minor code may provide more information
- No credentials cache found
2 检测连接时间
# time ssh root@192.168.100.10 exit
二解决方法 (建议一个个设置, 因为每个人连接慢的原因都不一样):
注意: 修改之后记得重启 sshd 服务
# service sshd restart
1 关闭 DNS 反向解析
在 linux 中, 默认就是开启了 SSH 的反向 DNS 解析, 这个会消耗大量时间, 因此需要关闭
- # vi /etc/ssh/sshd_config
- UseDNS=no
在配置文件中, 虽然 UseDNS yes 是被注释的, 但默认开关就是 yes
2 关闭 SERVER 上的 GSS 认证
在 authentication gssapi-with-mic 有很大的可能出现问题, 因此关闭 GSS 认证可以提高 ssh 连接速度
- # vi /etc/ssh/sshd_config
- GSSAPIAuthentication no
3 修改 server 上 nsswitch.conf 文件
# vi /etc/nsswitch.conf
找到
hosts: files dns
改为
hosts:files
hosts: files dns 这一行含义是对于访问的主机进行域名解析的顺序, 是先访问 file, 也就是 / etc/hosts 文件, 如果 hosts 中没有记录域名, 则访问 dns, 进行域名解析, 如果 dns 也无法访问, 就会等待访问超时后返回, 因此等待时间比较长
注意: 如果 SERVER 需要通过域名访问其他服务器, 则需要保留此行
4 修改 SERVER 上 resolv.conf 文件
4.1 删除 / etc/resolv.conf 中所有不使用的 IP
4.2 把 nameserver 全部删除, 问题也能解决, 但是服务器就无法上网了
4.3 如果 SERVER 曾经配置过双网卡, 则在该文件中会有一行目前不使用的 IP 地址, 删除该行即可
5 修改 SERVER 上 hosts 文件
在 SERVER 上 / etc/hosts 文件中把客户端的 IP 和 HOSTNAME 加入
6 打开 SERVER 上的 IgnoreRhosts 参数
IgnoreRhosts 参数可以忽略以前登录过主机的记录, 设置为 yes 后可以极大的提高连接速度
- # vi /etc/ssh/sshd_config
- IgnoreRhosts yes
-------------------- 以上的均在 SERVER 上设置, 以下的均在 CLIENT 上设置 -----------------------
7 修改客户端的 hosts 文件
将目标 SERVER 的 IP 和域名加上去, 使得本机的 DNS 服务能解析目标地址
- # vi /etc/hosts
- 192.168.100.11 doiido.com
注: hosts 文件格式为目标 SERVER_IP 目标 SERVER_NAME 但是使用这个方法有一个弊端, 如果需要给每台 SERVER 都添加一个域名解析
8 修改客户端配置文件 ssh_conf(注意, 不是 sshd_conf)
# vi /etc/ssh/ssh_conf
找到
GSSAPIAuthentication yes
改为
GSSAPIAuthentication no
来源: http://www.bubuko.com/infodetail-2531469.html