以前解决过SSH登录卡顿的问题,它一般来源于:
- GSSAPIAuthentication
- UseDNS
以上设置项被默认打开或意外打开。
而这次遇到的问题不是卡顿,而是卡在‘Last login’,停止在那里,一直不动!偶尔间操作了‘Ctrl + C’, 竟然可以摆脱卡住状态,进入到ssh已登录完成的提示界面。。。
最开始一直试图想获取登录过程的执行堆栈,以利于查看到底卡顿在什么地方,但是,一直没有觅得方法。
后来,搜索一些网络博文,看到一些文章,也同样介绍了卡在'Last login'界面的故障,然后用‘Ctrl + C’结束掉卡停状态,在出现命令提示符后,执行‘~/.bashrc’脚本,完成环境变量设置,以便于后期执行其他shell操作。
但是,博文并未说明造成卡住的原因何在?以及也并未给出完美的解决之道,总不能每次都这么麻烦地操作吧?!
带着怀疑和在不经意状态,随便试了下‘source ~/.bashrc’,发现命令竟然卡住了!
利用bash -x ~/.bashrc发现具体卡住的代码行,发现是意外在‘~/.bashrc’中添加了'dd'命令!
因为在ssh登录过程中,登录过程同样要执行~/.bashrc脚本,所以,我们所经历的卡住现象,可能都是源于可能由于用‘vi’编辑~/.bashrc时的一些意外输入,例如,删除行时,不经意留下的键盘输入‘dd’ !
在引述文章的基础上,进一步说明引起ssh登录卡在‘Last login’的原因 :)
引起故障脚本
# in ~/.bashrc script file
# some code
# 引起卡住、卡停、不动的意外键盘输入
dd
export SOME_ENV1=VALUE1
故障现象
ssh root@centos7
Last login: Tue Jul 12 08:53:00 2022 from 192.168.31.125
^C记录了0+0 的读入
记录了0+0 的写出
0字节(0 B)已复制,13.1384 秒,0.0 kB/秒
[root@ftptransfer ~]#