当前位置: 代码迷 >> 综合 >> Centos5.5 ssh登录慢的解决办法
  详细解决方案

Centos5.5 ssh登录慢的解决办法

热度:69   发布时间:2024-01-09 15:54:57.0

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登陆很慢的解决办法

分类: [Linux]--[系统管理] 511人阅读 评论(0) 收藏 举报
相信很多朋友在使用Linux系统的时候因为安全性的原因摒弃了telnet rlogin 或者 X-window,而把openssh作为自己默认的远程登录方式。
然而经常会遇到的一个情况是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.11
ssh root@192.168.0.11
如果修改过ssh登录端口的可以:
ssh -p 12333 192.168.0.11
ssh -l root -p 12333 216.230.230.114
ssh -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

  相关解决方案