我有一台全新的戴尔电脑,预装了 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 中的脚本被忽略了吗?