我正在尝试将我的默认 shell 更改为 zsh。我已将条目正确放置在 /etc/shells 文件中。
我每次尝试使用此命令都以相同的错误消息结束:
chsh -s $(which zsh)
Password: ### after entering the correct password
chsh: PAM: Authentication failure
sudo chsh -s $(which zsh) ## yields the same result
我已使用 sudo 执行其他命令以确保不是密码失败,并且所有其他命令均能正常工作,唯独“chsh”不起作用。
完全不知所措。
附加信息:
我已根据 Oli 建议的代码在 /etc/shells 文件中附加了一行。
echo $SHELL
/bin/bash
sudo chsh -s /usr/local/bin/zsh
Password:
chsh: PAM: Authentication failure
chsh -s /usr/local/bin/zsh
You may not change the shell for 'username'
仍然无法更改 shell。
答案1
PAM 对 的控制相当严格chsh
。如您所见/etc/pam.d/chsh
,它正在进行检查:
# This will not allow a user to change their shell unless
# their current one is listed in /etc/shells. This keeps
# accounts with special shells from changing them.
auth required pam_shells.so
还有针对此项检查的手册页 ( man pam_shells
),其中告诉我们以下内容:
pam_shells is a PAM module that only allows access to the system if the users shell is
listed in /etc/shells.
It also checks if /etc/shells is a plain file and not world writable.
因此,听起来,你没有一行/usr/bin/zsh
。/etc/shells
让我们添加一行:
echo $(which zsh) | sudo tee -a /etc/shells
chsh -s $(which zsh)
要么那样,要么你的当前的shell 没有列在那里。如果您被困在类似 的地方rbash
,那可能不是列出的示例,这可能会阻止您更改 shell。
我测试了(zsh
从中删除了该行/etc/shells
,加载zsh
并尝试了chsh
),但看到了非常不同的错误消息:
You may not change the shell for 'oli'
所以可能不是这个。
答案2
我家里的机器上的情况是,
/etc/shells
不仅有 的多个条目/usr/bin/zsh
,而且没有 的条目/bin/zsh
。
的测试which zsh | sudo tee -a /etc/shells
将会返回一个良好的结果。
快速手动编辑因此/bin/zsh
唯一与 zsh 相关的条目足以纠正任何错误。
之后,我删除了/home/usr/.oh-my-zsh
目录(我保留了我的.zshrc
文件),并进行了完全重新安装,这消除了 chsh 问题。也许是某些错误的 oh-my-zsh 文件和错误的 shell 文件的组合导致了错误?
答案3
就我的情况而言,问题在于我创建的用户没有 shell(我的用户的密码文件中没有 shell)。我必须以 root 身份更改 shell。