16.04 ssh 立即退出

16.04 ssh 立即退出

我有一台全新的戴尔电脑,预装了 Ubuntu 16.04.02 LTS。我已经更新,设置了本地帐户并安装了 ssh。

当我尝试通过 ssh 进入机器时,它会要求我输入密码,打印“欢迎使用 Ubuntu”、“上次登录:星期四...”然后“连接已关闭”。

这发生在远程系统上,或者在我运行本地时发生

ssh 127.0.0.1

问题只是登录会话,如果我给它一个命令,它就会工作,就像

ssh 127.0.0.1 /bin/date

我甚至可以得到一个最小工作 shell,但它没有附加到 tty,所以很多东西都无法工作。

ssh 127.0.0.1 /bin/bash -i

该帐户使用 bash。启动脚本与 /etc/skel 中的脚本没有变化,只有 .bashrc 和 .profile。我尝试将它们移开。根据一个旧答案,我已验证它们中没有退出。

我使用的是普通用户帐户;不是 root。

答案1

我可以通过在 /etc/profile 中添加调试语句来跟踪早期启动,从而隔离问题。

Dell 添加了文件 /etc/profile.d/display-toggle-keybinding.sh 来调整一些键绑定。该文件以以下内容开头:

if [ -z "$DISPLAY" ]; then  
   exit 0  
fi

由于 /etc/profile.d 中的内容是有来源的,它们在当前 shell 而不是子 shell 中运行,所以当它们退出时,整个会话就会终止。

一旦我发现问题,就可以通过尝试轻松验证

ssh -X 127.0.0.1

运行正常。-X 启用 X11 转发,这意味着 DISPLAY 已设置。只有未设置 DISPLAY 时才会出现问题。

您可以通过编辑 /etc/profile.d/display-toggle-keybinding.sh 并将“exit 0”更改为“return 0”来更正此问题。“return”是“exit”的一个功能稍弱的版本,它仅退出当前正在执行的文件。

文件中的注释表明它来自软件包“dell-wmi-aio”,因此它可能是 AIO 系统所独有的。我使用的是 Optiplex 7450 AIO。

我发现这个问题的答案对于描述各种类型的 bash shell(交互式、登录式、图形化等)有何不同以及它们的启动顺序非常有帮助:
/etc/profile.d 中的脚本被忽略了吗?

相关内容