您的位置:首页 > 运维架构 > Linux

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

2014-11-15 11:43 302 查看

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]--[系统管理] 2012-12-09 19:58
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: