デフォルトのシェルを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の推奨コードごとに1行を/ 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'
それでもシェルを変更することはできません。
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)
それまたはあなたのcurrent Shellがリストされていません。 rbash
のようなものにこだわっている場合、それはリストされた例ではなく、シェルの変更を妨げる可能性があります。
私はテストしました(/etc/shells
からzsh
行を削除し、zsh
をロードし、chsh
を試みましたが、非常に異なるエラーメッセージが表示されました。
You may not change the Shell for 'oli'
おそらくこれではないでしょう。
私の自宅のマシンの状況は/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ファイルの組み合わせがエラーを作成したのでしょうか?