/etc/passwd
やその他のsu
にアクセスせずに、Solaris/SunOSのシェルを自分のユーザーのみに設定するにはどうすればよいですか?
コマンド(2)を送信すると、インタラクティブssh
(1)とssh
の両方で機能します。
uname -a
はSunOS ... 5.10 Generic_148889-04 i86pc i386 i86pc
と言います
コメントと回答に応じて編集
chsh
はありません。
できません/usr/bin/passwd -e
-許可が拒否されました。
デフォルトのシェルはbashです。 zshをお願いします。
私はすでにShell
環境変数を手動で設定し、.profile
ファイルでシェルを手動で開始しようとしましたが、これは私の場合は機能しません2番目のケース(2) :ssh user@Host command
はbashでcommand
を実行します。
ログイン時に自分の優先シェルを取得するのと比較して、それはマイナーなので、回避策は確かに言及する価値がありますが、この質問の私の意図は、正しい方法で正しく取得することでした。それは1人のユーザーに関連しているだけなので、SAを使用しなくても実行できると思っていましたが、今は確信が持てません。 (しかし、(1)と(2)を解決する回避策は確かにすばらしいです。)
Shell=newshell; exec "$Shell"
トリックはすでにカバーされています。
ここで、新しいシェルを使用するためにsshでコマンドを実行する場合も同様です。現在のログインシェルがbash
の場合、これを~/.bashrc
に追加できます。
if [ -n "$BASH_EXECUTION_STRING" ]; then
export Shell=/bin/zsh
exec "$Shell" -c "$BASH_EXECUTION_STRING"
fi
これは、something
がbash -c something
andで始まるときに、新しいシェルでbash
を実行し、~/.bashrc
を読み取ります。
bash -c something
で始まるシェルは、通常~/.bashrc
を読み取りません。例外は、これらのbash
がsshd
またはrshd
によって呼び出された場合、またはbash -ic something
で呼び出された場合です。
ssh
ケースのみを対象にする場合は、[ -n "$SSH_CONNECTION" ]
のチェックを追加できます。
chsh
通常、/etc/passwd
にアクセスしなくても、コマンドchsh
を使用してシェルを変更できます。これは通常、デフォルトのシェルをリストするファイルです。次に例を示します。
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh
通常のユーザーは、自分のアカウントのログインシェルのみを変更できます。スーパーユーザー、つまりrootユーザーは、任意のアカウントのログインシェルを変更できます。次のコマンドを使用して、システムで使用可能なシェルを確認できます。
$ chsh --list-shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
/bin/zsh
シェルを変更するには、次のコマンドを使用できます。
$ chsh -s /bin/zsh saml
Changing Shell for saml.
Password:
Shell changed.
/etc/passwd
ファイルを見ると、効果は明らかです。
$ grep saml /etc/passwd
saml:x:500:501:Sam M. (local):/home/saml:/bin/zsh
変更はすぐには表示されません。それを表示するには、ログアウト/ログインする必要があります。
[saml@grinchy]~% echo $Shell
/bin/zsh
/usr/bin/passwd -e
コマンドchsh
にアクセスできず、Solarisにはないようで、/etc/passwd
で変更するためのrootアクセス権がない場合でも、まだ実行できる可能性がありますこのコマンドでも同じです:
$ /usr/bin/passwd -e
上記のいずれの方法もオプションではない場合、基本的にこの最後のオプションが残されます。これは、既存のシェルのログインファイルに次のいずれかを追加することです。
デフォルトのシェル:/ bin/cshまたは/ bin/tcsh
次の行を$HOME/.login
に追加します。
setenv Shell=/bin/bash
exec $Shell
デフォルトのシェル:/ bin/bash
以下を$HOME/.bash_profile
に追加します。
export Shell=/bin/zsh
exec $Shell
上記で考慮すべきいくつかの追加事項、たとえば、設定する前に現在の$ Shellがすでに/bin/bash
であるかどうかを確認するチェックを実行することで、それらをより確実なものにすることができます。ある場合は何もしないでください。そうでない場合は、先に進んでexec $Shell
を実行してください。
Vanilla Solarisのインストールではできません。簡単な回避策は、必要なシェルを実行するようにプロファイルを変更することです。
たとえば、/etc/passwd
は、シェルが/bin/bash
が好み/bin/ksh
:
$ tail -2 ~/.bash_profile
export Shell=/bin/ksh
exec $Shell
タイプミスでロックアウトしたり、偽のexecやロジックで無限ループに入らないように注意してください。