在脚本中永久切换到 zsh,无需成为 root 且无需输入密码

在脚本中永久切换到 zsh,无需成为 root 且无需输入密码

有没有什么方法可以在不需要 root 的情况下运行chsh -s /bin/zsh并且不需要输入密码?我想将其放入一个不由 root 调用的非交互式脚本中。

答案1

如果您没有更改登录 shell 的权限,您可以告诉 bash (我假设 bash 是您的登录 shell)将其替换为 zsh。在您的 中~/.bash_login,添加以下行:

exec /bin/zsh --login

答案2

如果您的版本chsh需要密码(我的版本需要密码),您将需要设置 sudo 具有特殊权限。您可以将其配置为允许访问任何程序而不提示输入密码,如下所示:

user   ALL=(ALL) NOPASSWD:/usr/bin/chsh

其中“user”是您的用户名(或组名称中带有 % 前缀)。确保指定您的chsh.这将不允许用户以 root 身份运行任何其他内容(包括从脚本),但它将允许该二进制文件以 root 身份运行而无需密码,从而绕过用户密码提示。

答案3

根据您的具体需求,如果您想这样做是因为您正在运行一个很长的脚本并且不希望它挂在该问题的中间,您可以预先要求输入密码,然后chshsudo特权执行,读取密码来自stdin.

read -p 'What is your password?' sudo_password

# rest of the script here

sudo -S chsh -s '/bin/zsh' "${USER}" <<< "${sudo_password}"

-S导致sudo从 读取密码stdin。意识到可能存在的安全风险使用这种方法(不过,我无法重现这一点,并且根据您的需要,这可能不是问题)。

相关内容