该死的小型 Linux telnet 服务器冻结

该死的小型 Linux telnet 服务器冻结

我在虚拟机中使用 Damn Small Linux(或“DSL”)(它“非纯粹”基于 Debian - 我可以访问 apt-get)。
我安装了 telnet 服务器(telnetd + xinetd)。
我还运行另一个虚拟机,这次安装了 telnet 客户端(Linux 发行版 AntiX)。

当我使用 telnet 从 AntiX 连接到 DSL 时,系统会提示我输入登录名+密码,这没问题。
但是,当我登录时,它只显示一条消息,然后就冻结了。我所说的“冻结”是指:

  1. 我可以输入任何我想要的内容,但是当我按 ENTER 键时,命令不会被执行。相反,光标只是移动到下一行。
  2. 行“dsl@dsl$”(提示输入命令)不显示。
  3. 在服务器端(DSL),登录时窗口会闪烁(关闭)。

似乎某个进程正在运行,但问题是它永远不会停止。我必须输入“Ctrl+C”来停止它并继续使用命令行。

这是冻结时的屏幕截图:telnet冻结截图

DSL 网站上还有一个警告,说如果您通过 apt-get 安装了错误的应用程序,那么您可能会破坏某些东西,“例如 X 服务器”?这可能是 X 服务器吗?

我的问题是:

  1. 我可以查出哪个进程正在运行吗?我在这里只是想尝试让它不再重新开始。
  2. 我可以让这个过程在 telnet 连接时不启动吗?

使用 root 登录也会重现该错误。

答案1

根据这个维基页面about /home/dsl/.bash_profile,该文件的默认内容检查您是否从 ssh 登录,如果不是,则使用命令startx启动 X11 图形服务器:

#!/bin/bash
export IRCNICK=DSL
SSH=`env | grep SSH_CONNECTION`
RUNLEVEL=`runlevel|cut -f2 -d' '`
if [ -z "$SSH" ]; then
   if [ $RUNLEVEL -eq 5 ]; then
       startx
   fi
fi

因此,当您从 telnet 登录时,不会检测到 ssh,并且您可能正在执行startx并运行 X11。最简单的解决方案是编辑此文件以使命令成为注释,: startx或以某种方式检测您的 telnet 连接。 Telnet 通常不设置任何特殊的环境变量。您也许可以使用该命令tty来查看您是否位于伪终端而不是真正的控制台上。例如,在该SSH=行之后添加:

case `tty` in
/dev/pts*) SSH=telnet ;;
esac

对于不同于 的用户,dsl例如root,您需要查看其主目录以查看它是否与 /home/dsl 不同,并检查.profile.bash_profile。找到目录,例如:

awk -F: '$1=="root"{print $6}' /etc/passwd

相关内容