• ssh 连接缓慢原因以及解决方法


    【问题】

    通过SSH服务远程访问Linux服务器,总是等待很久才能登陆。

    【分析&解决】

    1、SSH服务默认启用了DNS反向解析的功能

    # 关闭

    sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
    # 另外在authentication gssapi-with-mic也有可能出现问题,在server上/etc/ssh/sshd_config文件中修改GSSAPIAuthentication no
    # 参数解说:
    服务器端启用了GSSAPI。登陆的时候客户端需要对服务器端的IP地址进行反解析,如果服务器的IP地址没有配置PTR记录,那么就容易在这里卡住了。  
    sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config

    2、在目标服务器上有一个文件/etc/nsswitch.conf ,里面有如下一行

    hosts: files dns myhostname

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

    就是那个myhostname项,/etc/hosts和dns都解析不到IP时,myhostname就起作用了,它可以把hostname,解析成自己范围内的IP地址,因此就可以ping通了。

    可以通过下面命令查看hostname对应的IP:

     但是通过myhostname 去解析会很慢,解析出来的ip可能也很慢,所以最好在/etc/hosts文件中配置hostname跟本机ip映射

    总结解决方案如下:

    1, 在server上/etc/hosts文件中把你本机的ip和hostname加入
    2, 在server上/etc/ssh/sshd_config文件中修改或加入UseDNS=no(这个方法试过了,好用)
    3, 注释掉server上/etc/resolv.conf中所有行(关于这个方法:另一台服务器虽然没有按照方法2修改配置文件sshd_config,但是在这台服务器resolv.conf为空,也就是说这个方法也好用)
    4, 修改server上/etc/nsswitch.conf中hosts为hosts: files
    5, restart sshd server【systemctl restart sshd】使配置生效
  • 相关阅读:
    webpack source map
    webpack 多页面应用打包
    webpack 资源内联
    webpack 移动端 CSSpx 自动转换成 rem
    webpack postcss插件
    css实现banner背景图上文字效果+
    css实现标题下划线效果
    Day 88 Django_DRF 序列化
    Day 87 VUE——xmall_front 案例
    Day 86 VUE——Vuex
  • 原文地址:https://www.cnblogs.com/liugp/p/14827476.html
Copyright © 2020-2023  润新知