SSH 登录缓慢
- |
- 浏览:366
- |
- 更新:2014-01-21 14:41
l 故障现象:
在使用SSH工具远程登录服务器时,出现登陆提示符很久才出现的情况。
l 问题查找:
可以在ssh命令后面加上“-v“ 参数,输出debug信息定位问题。
通常你会看到类似这样的信息:
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
Cannot determine realm for numeric host address
l 故障原因:
看过上面的输出结果,很明显这是由于DNS解析问题导致的。
1. 为什么ssh登录过程中要用到DNS解析服务呢?
再仔细看看上面debug的输出,是GSSAPI认证方式惹得祸。
2. 为什么SSH登录过程中要用到GSSAPI认证呢?
GSSAPI是一种用于在网络应用中执行强加密认证的ITEF 标准,在支持SSH V2的服务器上都是默认开启的。
3. 造成慢的原因到底是什么呢?
默认情况下,GSSAPIAuthentication在服务器端和客户端都激活的。如果DNS服务出现问题,那么登录过程要等到DNS查询超时后才能继续,这就是为什么SSH登录提示符要等很久才出现的原因。
l 解决方法:
1. 如果远程SSH服务器无法改动,则修改ssh客户端配置文件
# vi /etc/ssh/ssh_config(以Linux客户端为例)
设置:GSSAPIAuthentication no
2. 修改远程SSH服务器的配置
# vi /etc/ssh/sshd_config
设置:GSSAPIAuthenticationno
同时也可以设置不使用DNS解析:UseDNS no
然后重启sshd服务
--------------------------------------------------------------------------------------------------
关于ssh登陆很慢的解决办法
然而经常会遇到的一个情况是telnet到server速度很快,但是ssh连接的时候却很慢,大概要等半分钟甚至更久。ping的速度也非常好,让人误以为是ssh连接不上。
下面说下如何解决这样的问题,最为常见的原因是因为server的sshd会去DNS查找访问client IP的hostname,如果DNS不可用或者没有相关记录,就会耗费大量时间。
1、在server上/etc/hosts文件中把你本机的ip和hostname加入
2、在server上/etc/ssh/sshd_config文件中修改或加入UseDNS=no,另外在authentication gssapi-with-mic也有可能出现问题,在server上/etc/ssh/sshd_config文件中修改GSSAPIAuthentication no
3、在server上/etc/nsswitch.conf中修改hosts: files dns为hosts: files
4、reboot server使配置生效
/etc/init.d/sshd restart重启sshd进程使配置生效。
------------------------------------------------------------------------------------------------------
用ssh连其他linux机器,会等待10-30秒才有提示输入密码。严重影响工作效率。登录很慢,登录上去后速度正常,这种情况主要有两种可能的原因:
1. DNS反向解析的问题
OpenSSH在用户登录的时候会验证IP,它根据用户的IP使用反向DNS找到主机名,再使用DNS找到IP地址,最后匹配一下登录的IP是否合法。如果客户机的IP没有域名,或者DNS服务器很慢或不通,那么登录就会很花时间。
解决办法:
在目标服务器上修改sshd服务器端配置,并重启sshd
vi /etc/ssh/sshd_config,设置UseDNS为no即可
当然也可以通过提供DNS正确反向解析的方法解决,有如下两种思路
(1) 在server上/etc/hosts文件中把常用的ip和hostname加入,然后在/etc/nsswitch.conf看看程序是否先查询hosts文件(一般缺省是这样)。
修改server上的hosts文件,将目标机器的IP和域名加上去。或者让本机的DNS 服务器能解析目标地址。
vi /etc/hosts
192.168.12.16 ourdev
其格式是“目标机器IP 目标机器名称”这种方法促效。没有延迟就连上了。不过如果给每台都加一个域名解析,挺辛苦的。但在windows下用putty或secure-crt时可以采用这种方法。
(2)起一台dns服务器(可以是本机),加入反向解析,把这个dns服务器加入到/etc/resolv.conf中。
2. 关闭ssh的gssapi认证
用ssh -v user@server 可以看到登录时有如下信息:
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
注:ssh -vvv user@server 可以看到更细的debug信息
解决办法:
在客户端上修改ssh客户端配置(注意不是sshd_conf)
vi /etc/ssh/ssh_config,设置GSSAPIAuthentication no 并重启sshd
可以使用ssh -o GSSAPIAuthentication=no user@server登录
GSSAPI ( Generic Security Services Application Programming Interface) 是一套类似Kerberos 5 的通用网络安全系统接口。该接口是对各种不同的客户端服务器安全机制的封装,以消除安全接口的不同,降低编程难度。但该接口在目标机器无域名解析时会有问题
使用strace查看后发现,ssh在验证完key之后,进行authentication gssapi-with-mic,此时先去连接DNS服务器,在这之后会进行其他操作。
----------------------------------------------------------------------------
- ssh远程登录命令简单实例
- 2013-07-17 14:29:56 我来说两句 作者:摘取天上星
- 收藏 我要投稿
-
ssh远程登录命令简单实例ssh命令用于远程登录上 Linux主机。常用格式:ssh [-l login_name] [-p port] [user@]hostname更详细的可以用ssh -h查看。举例不指定用户:ssh 192.168.0.11指定用户:ssh -l root 192.168.0.11ssh root@192.168.0.11如果修改过ssh登录端口的可以:ssh -p 12333 192.168.0.11ssh -l root -p 12333 216.230.230.114ssh -p 12333 root@216.230.230.114另外修改配置文件/etc/ssh/sshd_config,可以改ssh登录端口和禁止root登录。改端口可以防止被端口扫描。编辑配置文件:vim /etc/ssh/sshd_config找到#Port 22,去掉注释,修改成一个五位的端口:Port 12333找到#PermitRootLogin yes,去掉注释,修改为:PermitRootLogin no重启sshd服务:service sshd restart