SSH登录慢的解决方案(例如等待很久才提示输入密码)

38 篇文章 2 订阅
36 篇文章 2 订阅

安装linux系统后我们经常会遇到的一个情况是telnet到server速度很快,但是ssh连接的时候却很慢,大概要等半分钟甚至更久。ping的速度也非常好,让人误以为是ssh连接不上。

本人在得到公司分配的服务器A后就遇到了这样的问题,具体现象如下:

1、ping服务器A反馈时延正常。

2、使用ssh连接服务器A要等待10秒后才显示连接对话框。

3、在服务器A上使用route命令查看路由要等待10秒后才显示路由内容。

4、对外进行https访问时,DNS解析或要等待10秒后才能进行正常的http访问。

在网上查了大量的资料得知可能是由于DNS解析的问题导致的,具体为server的sshd会去DNS查找访问client IP的hostname,如果DNS不可用或者没有相关记录,就会耗费大量时间。

正常情况下默认配置下 sshd 初次接受 ssh 客户端连接的时候会自动反向解析客户端 IP 以得到 ssh 客户端的域名或主机名。如果这个时候 DNS 的反向解析不正确,sshd 就会等到 DNS 解析超时后才提供 ssh 连接,这样就造成连接时间过长、ssh 客户端等待的情况,一般为10-30秒左右。有个简单的解决办法就是在 sshd 的配置文件(sshd_config)里取消 sshd 的反向 DNS 解析。

# vi /etc/ssh/sshd_config 

UseDNS no 

# systemctl restart sshd

如果没有这种配置项,可以直接把DNS服务禁掉,如下:

# cat /etc/resolv.conf

# Generated by NetworkManager

#search openstacklocal

#nameserver xxxx.xxxx.xxxx.xxxx

#nameserver xxxx.xxxx.xxxx.xxxx

也可以在server上/etc/hosts文件中把你本机的ip和hostname加入。另外在authentication gssapi-with-mic也有可能出现问题,在server上/etc/ssh/sshd_config文件中修改GSSAPIAuthentication no。修改server上/etc/nsswitch.conf中hosts为hosts: files。reboot server使配置生效

对于nsswitch.conf这个文件需要单独解释下。一般情况下里面默认会这么写:hosts: files dns。这行的含义是对于访问的主机进行域名解析的顺序,是先访问file,也就是/etc/hosts文件,如果hosts中没有记录域名,则访问dns,进行域名解析,如果dns也无法访问,就会等待访问超时后返回,因此等待时间比较长。那如果将这一行屏蔽掉是不是也可以达到同样的效果呢?应该是可以的,但是如果本机要通过域名访问其他服务器,则肯定无法访问,因此这行应该需要保留。这个问题也提示我们,dns如果不可用,会带来的一些副作用的。

 

解决方案总结:

1、在server上/etc/hosts文件中把你本机的ip和hostname加入;

2、在server上/etc/ssh/sshd_config文件中修改或加入UseDNS=no;

3、注释掉server上/etc/resolv.conf中所有行或清空;

4、修改server上/etc/nsswitch.conf中hosts为hosts: files。

         方案1、2、3为较为常用,一般情况下不太会对系统产生影响,4因为涉及DNS的使用故此建议在1、2、3方法均不可用的情况下再使用。

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CentOS SSH一直提示输入密码可能由以下几个原因引起: 1. SSH配置文件错误:请检查/etc/ssh/sshd_config文件,确保以下配置正确设置: - PubkeyAuthentication yes - PasswordAuthentication no 2. SSH公钥认证配置错误:请确保您已将公钥添加到您的CentOS用户的authorized_keys文件中,并正确设置权限。 - 在本地机器上执行ssh-keygen命令生成公私钥对。 - 将公钥复制到CentOS服务器上的用户目录的.ssh/authorized_keys文件中。 - 执行chmod 600 ~/.ssh/authorized_keys命令,确保只有用户本人可以读取该文件。 3. SSH服务错误或未启动:请确保SSH服务已正确安装并正在运行。您可以使用以下命令检查和启动服务: - systemctl status sshd:检查SSH服务状态。 - systemctl start sshd:启动SSH服务。 - systemctl enable sshd:设置SSH服务自动启动。 4. 防火墙阻止SSH连接:请确保防火墙允许通过SSH连接。 - 使用以下命令检查防火墙的SSH规则:iptables -L | grep SSH。 - 如果发现没有规则,请添加允许SSH连接的规则:iptables -A INPUT -p tcp --dport 22 -j ACCEPT。 5. SELinux策略限制:如果您的CentOS系统启用了SELinux,请确保SSH连接受到允许。 - 使用以下命令检查SELinux状态:sestatus。 - 如果它是enforcing或permissive状态,请添加SSH连接允许规则:semanage port -a -t ssh_port_t -p tcp 22。 如果您仍然在尝试连接时遇到问题,请仔细检查上述步骤,并确保您的配置设置正确无误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值