Telnet 服务器问题
最近的 Yum 更新(2016 年 7 月 20 日)似乎破坏了我们一台虚拟机上的 telnet 服务器。使用与同一服务器的 SSH 连接工作正常。我正在尝试找出问题所在,但并不知道自己在做什么,因此如能得到任何帮助我将不胜感激。
症状
当我们使用 telnet 协议登录到服务器时,我们会得到这种行为:
[uniworks@mort ~]$
[uniworks@mort ~]$
[uniworks@mort ~]$
[uniworks@mort ~]$
speed 9600 baud; rows 64; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
正如您所看到的,命令没有回显到屏幕上(就像打开“stty -echo”一样),并且在按 Enter 时我们得到了这种“楼梯”效果。
也许重要的是,我们一连接就会遇到一些问题 -甚至在登录之前:
Trying 128.222.3.71...
Connected to mort.
Escape character is '^]'.
Scientific Linux release 6.8 (Carbon)
Kernel 2.6.32-504.16.2.el6.x86_64 on an x86_64
ogin:
Password:
ast login: Mon Jul 25 12:15:44 from sam
ress the <Backspace> key now:
正如你所看到的,“login:”的第一个字符丢失了,并且我输入的用户名没有显示出来。
诊断
首先,这些症状只有在我们使用telnet时才会出现。我尝试使用已连接的会话到另一台旧的 RHEL 4.7 服务器,然后从该会话远程登录到有问题的服务器。然后我退出并在同一会话中然后我使用相同的用户名等连接到问题服务器。然后我重复了该过程几次,结果是相同的。因此 telnet 模拟器、用户和其他设置不是问题。
登录后我检查了 TERM 和 stty 设置,它们几乎是相同的。在 telnet 会话中,速度设置为 9600 cf。 38400 当我使用 ssh 连接时,“stty lnext”设置为“^V”cf。 “” - 两者似乎都不重要。我试过让它们相同以防万一,但这没有任何区别。
当我使用“向上箭头”键 + Enter 重复上一个命令时,会显示该命令,但缺少第一个字符。如果我输入“man stty”,手册页似乎显示得很好。
我还尝试在文本文件上运行 vim,并且收到一些奇怪的字符,因此问题看起来像是终端问题,但不确定为什么它适用于 ssh 连接...
平台
科学 Linux 6x:
[root@mort ~]# cat /etc/redhat-release
Scientific Linux release 6.8 (Carbon)
一些软件包版本:
[root@mort ~]# rpm -q glibc xinetd telnet-server ncurses ncurses-base ncurses-libs
glibc-2.12-1.192.el6.x86_64
xinetd-2.3.14-40.el6.x86_64
telnet-server-0.17-48.el6.x86_64
ncurses-5.7-4.20090207.el6.x86_64
ncurses-base-5.7-4.20090207.el6.x86_64
ncurses-libs-5.7-4.20090207.el6.x86_64
答案1
嗯...在我执行以下操作后,问题似乎消失了:
- 做了另一个
yum update
安装了该kernel-2.6.32-642.3.1.el6.x86_64
软件包及其关联kernel-firmware
软件包的操作 - 应用了微软通用修复几年前 - 我踢掉了所有人并重新启动了服务器(VM)
(还有 samba4-libs、xorg-x11-drv-ati-firmware、kernel-devel 和 kernel-headers 软件包的更新,但我怀疑这些更新是否重要。)
我可以从“last”的输出中看到,我在写这个问题的同一天早上已经重新启动了服务器,这让我相信内核更新解决了问题。这些模式"kernel*"
和"*firmware*"
被明确排除在 (Scientific Linux) 软件包的默认配置中的自动更新过程之外yum-autoupdate
,因此如果我手动安装了更新,我可能永远不会发现该问题。我以前从未见过这种行为,事实上我不记得以前看到过内核更新带来的任何明显的副作用,所以这对我来说是一个新的现象。
答案2
看起来您有一个后台进程仍然连接到用于处理您的(新)登录的 tty。重新启动会终止该进程,从而解决问题。
另一个解决方案是确定受影响的 tty (run tty
) 的名称并用于ps -ft {ttyname}
识别进程及其kill
。
ps -t $(tty) | awk 'NR>1 {print $1}' | sudo xargs kill -TERM