如果未安装用户默认 shell 会发生什么情况?

如果未安装用户默认 shell 会发生什么情况?

我在一家大公司担任系统管理员,必须维护多个 Windows 和 Linux (Ubuntu 16.04) 虚拟机。由于我想使用zsh而不是bash在 Linux VM 上使用,因此我必须更改默认 shell。

现在,我使用 Windows 域帐户登录 Linux,该帐户强制执行 AD 设置;这意味着我无法更改该passwd文件或用于chsh更改我的默认 shell,因此我必须找到另一种方法。这种方式是通过该属性在 AD 中强制执行 shell loginShell

问题是,如果我登录到没有安装 zsh 的 Linux VM 上,会发生什么情况?它会回退到bash/ sh,它会卡住还是其他什么?

答案1

咱们试试吧!

服务器上的 shell 发生了变化:

[myserver ~]% getent passwd myuser
myuser:x:150:150:myuser:/home/myuser:/foo

让我们登录:

[myclient ~]% ssh myserver
Received disconnect from myserver: 2: Too many authentication failures for myuser

从服务器上的 SSH 日志:

Nov 22 09:30:27 myserver sshd[20719]: Accepted gssapi-with-mic for myuser from myclient port 33808 ssh2
Nov 22 09:30:27 myserver sshd[20719]: pam_unix(sshd:session): session opened for user myuser by (uid=0)
Nov 22 09:31:18 myserver sshd[20727]: Received disconnect from myclient: 11: disconnected by user
Nov 22 09:31:18 myserver sshd[20719]: pam_unix(sshd:session): session closed for user myuser
Nov 22 09:31:20 myserver sshd[20828]: User myuser not allowed because shell /foo does not exist
Nov 22 09:31:20 myserver sshd[20835]: input_userauth_request: invalid user myuser
Nov 22 09:31:20 myserver sshd[20835]: Disconnecting: Too many authentication failures for myuser

关键行:User myuser not allowed because shell /foo does not exist.因此,如果您没有有效的 shell 设置,则无法登录。

答案2

没有后备方案。将会出现错误消息,例如...

Cannot execute /does/not/exist: No such file or directory.

zsh您可以在不修改 AD的情况下添加 的调用。

echo 'exec zsh' >> ~/.bashrc

然后,每次使用 登录时bash,都会zsh自动启动。

答案3

如上所述,您将陷入登录循环,并且无法登录。

不幸的是,当前的答案如果使用的话也会导致登录循环,因为 exec 调用会崩溃。它还会忽略提供给 bash 的参数,从而阻止大多数复杂的用例。

添加

[ -x "$(command -v zsh)" ] && exec zsh "$@"

作为第一行将.bashrc首先检查 zsh 是否可用

添加

[ -n "$GNOME_TERMINAL_SCREEN" ] && [ -x "$(command -v zsh)" ] && exec zsh "$@"

还应该检查您是否在 gnome 终端而不是 tty 中运行 shell

相关内容