有没有什么方法可以在不需要 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
根据您的具体需求,如果您想这样做是因为您正在运行一个很长的脚本并且不希望它挂在该问题的中间,您可以预先要求输入密码,然后chsh
以sudo
特权执行,读取密码来自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
。意识到可能存在的安全风险使用这种方法(不过,我无法重现这一点,并且根据您的需要,这可能不是问题)。