SSH远程连接时无报错但连接后自动断开

问题描述

同时满足以下现象时可能是该问题:

  • 现象一:telnet实例22端口没有问题。

  • 现象二:如图所示,SSH登录之后,输出了欢迎语句,代表已经成功连接,单后续自动关闭连接通道。

    image

问题原因

可能/etc/profile/root/.bashrc配置文件中包含exit或其他能够导致退出登录的命令。

可能是由于误修改文件或者遭受恶意篡改、挖矿等。

解决方案

  1. 尝试使用VNC登录服务器,检查/etc/profile 和 /root/.bashrc (普通用户则需要检查/home/<UserNmae>/.bashrc)是否包含exit或其他能够导致退出登录的命令。image

  2. VNC无法登录服务器,可通过云助手执行以下命令进行检查。

    1. 执行命令过滤exit相关内容。

      grep -Hin -C 3 'exit' /etc/profile /root/.bashrc
      
      # 扩展使用,如果profilebashrc没有的话则执行这个,但要仔细辨别过滤的内容
      grep -iHn -C3 "exit" /etc/profile /root/.bashrc /etc/bash.bashrc ~/.bash_profile ~/.bash_login ~/.profile /etc/environment $(find /etc/profile.d/ -type f) ~/.bash_logout
      说明

      有些流程控制语句中也会有exit指令,但是否影响登录需要拿到完整的文件进行分析,或更改 -C参数来显示更多上下文信息进行判断。

      image

    2. 如果有筛选到对应的exit字段的话,则需要使用sed进行注释掉,比如/root/.bashrc有一个exit字段,那么运行以下命令:

      sed -i '/^exit/s/^/#/' /root/.bashrc
      重要

      sed命令加上-i参数会直接修改文件的,若不确定是否会正确修改的话,建议先备份或者不使用-i参数,确认输出结果为所需结果时再添加-i参数。

      image

      image