路漫漫其修远兮,吾将上下而求索。

导航

记录一次Linux远程连接故障排查

问题描述:

接到用户反馈,远程连接linux服务器发生故障,具体情况是,当使用xshell远程连接该服务器时,一直卡在连接界面上,直到超时,不能进入到服务器内部,截图如下。

排查过程:

1.接到问题的第一反应是可能是ssh服务有问题,准备登录到服务器内部,但是也出现了上面的情况,等待事件过长,就想着取消登录,直接按下了ctrl+c,神奇的事情就发生了,居然进入了服务器内部,如下(一脸懵逼中···)

看到这个界面的时候,第一反应是用户的配置文件丢了,但是查看了下,用户家目录中的文件完好,先不管这个问题了,先检查ssh的配置文件和重启了ssh服务之后再说,通过检查ssh的配置文件,并没有发现ssh配置文件被更改,重启ssh服务也没有问题。

2.接下来就是查看登录日志文件,message日志文件和secure日志文件显示信息如下,
查看message日志,显示如下:

查看secure登录日志,显示如下:

通过上面的日志信息,可以看出,远程服务器是接受了连接请求,但就是进入不了服务器,原因在哪里呢?

3.接下查看用户的历史命令,查看用户最近修改过的配置文件
通过history查看用户历史命令记录,未发现对认证文件的修改;
通过find /etc/ -type f -mtime -10命令查看用户最近10天内更改过的/etc/目录中的文件,也没发现对认证文件更改的记录,问题排查陷入僵局。

4.这个时候就只有百度查找看看是否有相同的故障处理记录了,百度上的绝大部分是说/etc/passwd文件中用户的shell被修改过,查看后,发现并没有。

5.然后想到,在连接等待的过程中,通过ctrl+c能够进入到服务器内部,那么就不应该是客户端和服务端认证的问题,认证有问题是不可能进入到服务器中的,那么会不会是在认证之后发生的问题呢?比如加载用户环境的时候发生了故障呢?
有了上面的想法后,就查看了跟用户环境有关的配置文件,第一眼就看了全局环境配置文件/etc/profile,发现该文件中有一行source /etc/profile内容,立马注释掉该内容,重新登录,登录故障消除。
source /etc/profile写入/etc/profile为什么会导致登录一直处于连接状态呢?
当用户登录时,认证完成后,加载用户环境的过程中,会使用到/etc/profile文件,当执行到source /etc/profile时,会再一次加载/etc/profile,不经意间此处形成了一个死循环,即无休止的加载/etc/profile文件,按下ctrl+c键能进入到服务器中,是由于人为的中断了该文件的加载。
附用户远程连接系统后,环境变量加载过程图(图片来自网络)

posted on 2020-04-28 11:45  rushiy  阅读(420)  评论(0编辑  收藏  举报