记录一次Linux远程连接故障排查
Posted scaven.qing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一次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
键能进入到服务器中,是由于人为的中断了该文件的加载。
附用户远程连接系统后,环境变量加载过程图(图片来自网络)
以上是关于记录一次Linux远程连接故障排查的主要内容,如果未能解决你的问题,请参考以下文章