zoukankan      html  css  js  c++  java
  • 2.SSH协议常见问题排错

    一、SSH登录linux服务器密码验证很慢

    现象:ssh登录服务器后,输入密码时,验证要等10秒左右,很慢。登录上去后速度正常,这种情况主要有两种可能的原因:

    1. DNS反向解析的问题

    OpenSSH在用户登录的时候会验证IP,它根据用户的IP使用反向DNS找到主机名,再使用DNS找到IP地址,最后匹配一下登录的IP是否合法。如果客户机的IP没有域名,或者DNS服务器很慢或不通,那么登录就会很花时间。

    解决办法:

    在目标服务器上修改sshd服务器端配置,并重启sshd

    vi /etc/ssh/sshd_config,设置UseDNS为no即可
    或者直接执行sed命令
    sed -i 's/#UseDNS yes/UseDNS no/' /etc/ssh/sshd_config
    (后续会专门总结一遍关于grep、sed、awk三剑客,以满足进行文本处理及日志分析)

    配置修改后,执行systemctl restart sshd,重启sshd服务即可。

    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登录被拒绝

    1. 查看是否安装ssh服务:
    rpm -qa |grep openssh-server
    apt install openssh-server #Ubuntu系统安装方式
    yum -y install openssh-server #Redhat、CentOS等安装方式
    

    2.查看是否允许root账号直接登录
    more /etc/ssh/sshd.config
    #PermitRootLogin yes

    3.查看SSH服务是否正常、及是否有拒绝访问的主机

     service sshd status
    #Apr 26 ****refused connect from 172.0.113.34
    #说明拒绝该172.0.113.34访问
    

    4.清空黑名单列表,并将该IP加入白名单即可解决ssh登录问题

    more /etc/hosts.deny 
    #清空相应被加入黑名单的ip,并将IP写入 /etc/hosts.allow,格式如下:
        # echo "sshd: 172.0.113.34" >> /etc/hosts.allow
    

    以下是刚刚做实验碰到的小案例
    在连接服务器时,我不断着输错密码,导致触发机制,无法SSH访问qinlulu
    (提示:ssh_exchange_identification: read: Connection reset by peer

    ## -v表示查看连接详细信息
     ssh -v root@10.43.190.251
    

    qinlulu
    解决办法:

    在服务端更改配置文件
    qinlulu
    重启下sshd服务,即可接触限制,实现SSH访问

    下面的排错方法是我之前在网上看到后珍藏的,感兴趣的小伙伴可以尝试下。
    echo “” > /var/log/secure #清空日志文件
    service rsyslog restart #重置系统日志计数器
    service denyhosts stop #停止服务
    /usr/share/denyhosts/data #关于hosts.deny中的IP记录一并清空
    service denyhosts start #启动服务
    vim /etc/hosts.deny #将解禁的IP删除
    /usr/share/denyhosts/daemon-control restart #重启。 完毕

    三、SSH登录后的超时设置

    有些小伙伴是否困惑过,登录服务器以后,我明明已经敲上TMOUT=0,为何过段时间还会自动断开连接呢?

    您可以这样做:

     vi /etc/ssh/sshd_config 
      ClientAliveInterval 60
      ClientAliveCountMax 3
    

    解释下:

    ClientAliveInterval 60,指定了服务器端向客户端请求消息的时间间隔,默认是0,不发送。而ClientAliveInterval=60表示每分钟发送一次,然后客户端响应,这样就保持长连接了。
    ClientAliveCountMax :使用默认值3即可, ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值,就自动断开。当然,正常情况下,客户端不会不响应

    四、利用SSH协议实现文件传输:SCP

    在介绍SSH协议族时,说明SSH不仅可以进行远程控制,也可以在计算机之间传送文件。

    scp就是secure copy,一个在linux下用来进行远程拷贝文件的命令。
    scp用法举例:

    • 从本地复制到远端
      1.复制文件

    命令格式:

      scp '本地文件' 远端用户名@远端设备IP:远端文件夹
      #举例:scp /home/test.txt root@10.10.10.2:/home 
    

    2.复制文件夹

    命令格式:

    ## -r:递归复制整个目录
    scp -r '本地文件夹'   远端用户名@远端设备IP:远端文件夹
    

    举个例子吧:
    qinlulu

    • 从远端复制到本端
      1.复制文件:

    从远程复制到本地,只要将从本地复制到远程的命令的后2个参数调换顺序即可;

    命令格式:

    scp 远端主机名@远端设备IP:/远端主机文件 /存放在本地的文件夹
    #举例: scp root@10.10.10.1:/test/test1.txt /tmp
    

    2.复制文件夹

    scp -r 远端主机名@远端设备IP:/远端主机文件夹/ /存放在本地的文件夹
    

    举例:
    qinlulu
    更多IT技术,请微信搜索公众号“秦露露”或者扫描下方二维码关注
    qinlulu

    十年磨一剑
  • 相关阅读:
    (dp)LeetCode Weekly Contest 34 -Non-negative Integers without Consecutive Ones
    (后缀数组)poj 3581 Sequence
    (最小生成树)Codeforces 76 A Gift
    (最小生成树)Codeforces Educational Codeforces Round 9 Magic Matrix
    (AC自动机)UVALive
    (trie)BUAAOJ 371
    CCF 201312-3 最大的矩形
    http错误代码含义
    数据结构-5-二叉树的实现以及递归遍历的实现
    数据结构-3.4-栈与队列
  • 原文地址:https://www.cnblogs.com/qinlulu/p/12270265.html
Copyright © 2011-2022 走看看