SSH连接反应慢的分析解决

     最近有朋友咨询一个问题,说是SSH连接反应非常慢,具体现象就是在内网中通过SSH进行连接其他服务器时,发现初始连接非常慢,常常要等30秒左右才出现相关界面,登录之后一切操作是正常的。

   SSH协议介绍:SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所制定;SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

     对于这个问题我们可以用ssh的详细模式跟踪(ssh -v x.x.x.x)一下,发现主要问题出在GSS认证和DNS解析上。在SSH连接中,GSSAPIAuthentication 参数主要是用于 Kerberos 校验认证的,USEDNS是用来做反向查询的。看一个图示:

最后一行显示了GSSAPI认证的进行过程。在UseDNS选项打开状态下,当客户端试图登录OpenSSH服务器时,服务器端先根据客户端的IP地址进行DNS PTR反向查询,查询出客户端的host name,然后根据查询出的客户端host name进行DNS 正向A记录查询,验证与其原始IP地址是否一致,这是防止客户端欺骗的一种手段,但一般我们的IP是不会有PTR记录的,打开这个选项只能浪费时间,所以这两项认证可以关闭。
      

       针对分析的结果,我们修改/etc/ssh/sshd_config 文件,设置GSSAPIAuthentication no ,同时设置 UseDNS no,最后保存修改,重启sshd服务再连接这个问题就可以解决了。
看图示:

 

注:如果服务器换了环境,需要正确配置DNS,如果没有配DNS或不需要DNS,可以关闭SSH的USEDNS选项。


补充:

sshd_config里还有一个参数UsePAM要注意

ChallengeResponseAuthentication no

UsePAM no

如果UsePAM为NO的话,则在VMWARE vsphere client里的控制台里可密码登陆,但是从外面用PUTTY和securecrt则无法登陆。

如果UsePAM为YES的话,则VMWARE vsphere client里的控制台、PUTTY和securecrt都可以登陆。也支持自动化脚本的免密登陆。




另一个朋友写的

[root@www ~]# vim/etc/ssh/sshd_config

# 1. 关于 SSH Server 的整体设定,包含使用的 port 啦,以及使用的密码演算方式

# Port 22

# SSH 预设使用 22 这个port,也可以使用多个port,即重复使用 port 这个设定项目!

# 例如想要开放 sshd 在 22与 443 ,则多加一行内容为:『 Port 443 』

# 然后重新启动 sshd 这样就好了!不过,不建议修改 port number 啦!

 

Protocol 2

# 选择的 SSH 协议版本,可以是1 也可以是 2 ,CentOS 5.x 预设是仅支援 V2。

# 如果想要支持旧版 V1 ,就得要使用『 Protocol 2,1 』才行。

 

# ListenAddress0.0.0.0

# 监听的主机适配器!举个例子来说,如果你有两个 IP,分别是 192.168.1.100 及

# 192.168.100.254,假设你只想要让 192.168.1.100 可以监听 sshd ,那就这样写:

# 『 ListenAddress 192.168.1.100 』默认值是监听所有接口的 SSH 要求

 

# PidFile/var/run/sshd.pid

# 可以放置 SSHD 这个 PID的档案!上述为默认值

 

# LoginGraceTime2m

# 当使用者连上 SSH server 之后,会出现输入密码的画面,在该画面中,

# 在多久时间内没有成功连上 SSH server 就强迫断线!若无单位则默认时间为秒!

 

# Compressiondelayed

# 指定何时开始使用压缩数据模式进行传输。有 yes, no 与登入后才将数据压缩 (delayed)

 

# 2. 说明主机的 Private Key 放置的档案,预设使用下面的档案即可!

# HostKey/etc/ssh/ssh_host_key        # SSHversion 1 使用的私钥

# HostKey/etc/ssh/ssh_host_rsa_key    # SSHversion 2 使用的 RSA 私钥

# HostKey/etc/ssh/ssh_host_dsa_key    # SSHversion 2 使用的 DSA 私钥

# 还记得我们在主机的 SSH 联机流程里面谈到的,这里就是 Host Key ~

 

# 3. 关于登录文件的讯息数据放置与 daemon 的名称!

SyslogFacilityAUTHPRIV

# 当有人使用 SSH 登入系统的时候,SSH 会记录信息,这个信息要记录在什么 daemon name

# 底下?预设是以 AUTH 来设定的,即是 /var/log/secure 里面!什么?忘记了!

# 回到 Linux 基础去翻一下。其他可用的 daemon name 为:DAEMON,USER,AUTH,

#LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5,

 

# LogLevel INFO

# 登录记录的等级!嘿嘿!任何讯息!同样的,忘记了就回去参考!

 

# 4. 安全设定项目!极重要!

# 4.1 登入设定部分

# PermitRootLoginyes

# 是否允许 root 登入!预设是允许的,但是建议设定成 no!

 

# StrictModes yes

# 是否让 sshd 去检查用户家目录或相关档案的权限数据,

# 这是为了担心使用者将某些重要档案的权限设错,可能会导致一些问题所致。

# 例如使用者的 ~.ssh/ 权限设错时,某些特殊情况下会不许用户登入

 

#PubkeyAuthentication yes

#AuthorizedKeysFile     .ssh/authorized_keys

# 是否允许用户自行使用成对的密钥系统进行登入行为,仅针对 version 2。

# 至于自制的公钥数据就放置于用户家目录下的.ssh/authorized_keys 内

 

PasswordAuthenticationyes

# 密码验证当然是需要的!所以这里写 yes 啰!

 

#PermitEmptyPasswords no

# 若上面那一项如果设定为 yes 的话,这一项就最好设定为 no ,

# 这个项目在是否允许以空的密码登入!当然不许!

 

# 4.2 认证部分

#RhostsAuthentication no

# 本机系统不使用 .rhosts,因为仅使用 .rhosts太不安全了,所以这里一定要设定为 no

 

# IgnoreRhosts yes

# 是否取消使用 ~/.ssh/.rhosts 来做为认证!当然是!

 

#RhostsRSAAuthentication no #

# 这个选项是专门给 version 1 用的,使用 rhosts 档案在 /etc/hosts.equiv

# 配合 RSA 演算方式来进行认证!不要使用啊!

 

#HostbasedAuthentication no

# 这个项目与上面的项目类似,不过是给 version 2 使用的!

 

#IgnoreUserKnownHosts no

# 是否忽略家目录内的 ~/.ssh/known_hosts 这个档案所记录的主机内容?

# 当然不要忽略,所以这里就是 no 啦!

 

ChallengeResponseAuthenticationno

# 允许任何的密码认证!所以,任何 login.conf 规定的认证方式,均可适用!

# 但目前我们比较喜欢使用 PAM 模块帮忙管理认证,因此这个选项可以设定为 no 喔!

 

UsePAM yes

# 利用 PAM 管理使用者认证有很多好处,可以记录与管理。

# 所以这里我们建议你使用 UsePAM 且 ChallengeResponseAuthentication 设定为 no

 

# 4.3 与 Kerberos 有关的参数设定!因为我们没有 Kerberos 主机,所以底下不用设定!

#KerberosAuthentication no

#KerberosOrLocalPasswd yes

#KerberosTicketCleanup yes

#KerberosTgtPassing no

 

# 4.4 底下是有关在 X-Window 底下使用的相关设定!

X11Forwarding yes

# X11DisplayOffset10

# X11UseLocalhostyes

# 比较重要的是 X11Forwarding 项目,他可以让窗口的数据透过 ssh 信道来传送喔!

# 在本章后面比较进阶的 ssh 使用方法中会谈到。

 

# 4.5 登入后的项目:

# PrintMotd yes

# 登入后是否显示出一些信息呢?例如上次登入的时间、地点等等,预设是 yes

# 亦即是打印出 /etc/motd 这个档案的内容。但是,如果为了安全,可以考虑改为 no !

 

# PrintLastLog yes

# 显示上次登入的信息!可以啊!预设也是 yes !

 

# TCPKeepAlive yes

# 当达成联机后,服务器会一直传送 TCP 封包给客户端藉以判断对方式否一直存在联机。

# 不过,如果联机时中间的路由器暂时停止服务几秒钟,也会让联机中断喔!

# 在这个情况下,任何一端死掉后,SSH可以立刻知道!而不会有僵尸程序的发生!

# 但如果你的网络或路由器常常不稳定,那么可以设定为 no 的啦!

 

UsePrivilegeSeparationyes

# 是否权限较低的程序来提供用户操作。我们知道 sshd 启动在 port 22 ,

# 因此启动的程序是属于 root 的身份。那么当 student 登入后,这个设定值

# 会让 sshd 产生一个属于sutdent 的 sshd 程序来使用,对系统较安全

 

MaxStartups 10

# 同时允许几个尚未登入的联机画面?当我们连上 SSH ,但是尚未输入密码时,

# 这个时候就是我们所谓的联机画面啦!在这个联机画面中,为了保护主机,

# 所以需要设定最大值,预设最多十个联机画面,而已经建立联机的不计算在这十个当中

 

# 4.6 关于用户抵挡的设定项目:

DenyUsers *

# 设定受抵挡的使用者名称,如果是全部的使用者,那就是全部挡吧!

# 若是部分使用者,可以将该账号填入!例如下列!

DenyUsers test

 

DenyGroups test

# 与 DenyUsers 相同!仅抵挡几个群组而已!

 

# 5. 关于 SFTP 服务与其他的设定项目!

Subsystem       sftp   /usr/lib/ssh/sftp-server

# UseDNS yes

# 一般来说,为了要判断客户端来源是正常合法的,因此会使用 DNS 去反查客户端的主机名

# 不过如果是在内网互连,这项目设定为 no 会让联机达成速度比较快。

复制代码

预设的 sshd 服务已经算是挺安全的了,不过还不够!建议你 (1) root 的登入权限取消; (2) ssh 版本设定为。其他的设定值就请你依照自己的喜好来设定了。通常不建议进行随便修改啦!另外,如果你修改过上面这个档案(/etc/ssh/sshd_config),那么就必需要重新启动一次 sshd 这个 daemon 才行!亦即是:

/etc/init.d/sshdrestart


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值