ユーザーのデフォルトシェルがインストールされていない場合はどうなりますか?

ユーザーのデフォルトシェルがインストールされていない場合はどうなりますか?

私は大企業のシステム管理者として働いており、複数のWindowsおよびLinux(Ubuntu 16.04)仮想マシンを維持する必要があります。 Linux VMzshの代わりに使用したいので、bashデフォルトのシェルを変更する必要があります。

これで、AD設定を強制するWindowsドメインアカウントを使用してLinuxにログインします。つまり、ファイルを変更したり、passwdそれを使用してchshデフォルトのシェルを変更したりできないため、別の方法を見つける必要があります。これは、この属性を介してADのシェルを強制することによって行われますloginShell

問題は、zshがインストールされていないLinux VMにログインするとどうなりますか?bash/に戻りますかsh、詰まっていますか?

答え1

やってみよう!

サーバーのシェルが変更されました:

[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.したがって、有効なシェル設定がないとログインできません。

答え2

バックアップ計画はありません。次のエラーメッセージが表示されます。

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

zshADを変更せずに通話を追加できます。

echo 'exec zsh' >> ~/.bashrc

これにより、loginを使用するたびに自動的に起動しbashますzsh

答え3

上記のようにログインループに入ってログインできません。

残念ながら、現在の回答はexec呼び出しがクラッシュするため、使用されるとログインループが発生します。また、bashに提供された引数を無視して、ほとんどの複雑なユースケースを回避します。

次へ追加

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

最初の行は最初に.bashrczshが利用可能かどうかをチェックします。

次へ追加

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

また、ttyではなくgnome端末でシェルを実行していることを確認する必要があります。

関連情報