/etc/passwd にアクセスせず、ユーザーに対してのみ Solaris/SunOS でシェルを変更します。

/etc/passwd にアクセスせず、ユーザーに対してのみ Solaris/SunOS でシェルを変更します。

/etc/passwdアクセス権やその他の権限なしで自分のユーザーにSolaris / SunOSでシェルを設定するにはどうすればよいですかsu

その後、相互作用ssh(1)とsshコマンド転送(2)が機能するはずです。

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 commandbashで実行されますcommand

これはログイン時に私が好むシェルを得るよりも副次的なものなので、回避策は確かに言及する価値があります。ただ私がこの質問をする目的は正しい方法を見つけることです。一人のユーザーにしか関係がないので、SAが介入されなくても可能だと思っていましたが、今はよくわかりません。 (しかし、問題(1)と(2)を解決する解決策は明らかに素晴らしいでしょう。)

答え1

方法#1:一緒にchsh

通常、このコマンドを使用してchshアクセスなしでシェルを変更できます/etc/passwd。ファイルには通常、デフォルトのシェルがリストされます。

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

方法#2:/usr/bin/passwd -e

Solaris には存在しない対応するコマンドへのアクセス権がなく、chsh変更できるルートアクセス権もない場合/etc/passwdでも、次のコマンドを使用して同じ操作を実行できます。

$ /usr/bin/passwd -e

方法#3:手動設定方法

上記のオプションのいずれもオプションでない場合、デフォルトでは最後のオプションが残ります。これは、既存のシェルのログインファイルに次のいずれかのオプションを追加することです。

  1. デフォルトシェル:/bin/cshまたは/bin/tcsh

    次の行を追加します$HOME/.login

    setenv SHELL=/bin/bash
    exec $SHELL
    
  2. 基本シェル: /bin/bash

    以下を追加してください$HOME/.bash_profile

    export SHELL=/bin/zsh
    exec $SHELL
    

上記で考慮する必要がある他のもの/bin/bash(たとえば、設定する前に現在$ SHELLがすでに存在していることを確認することでより完璧にすることができます)、そうであれば何もしないでくださいexec $SHELL

引用する

答え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新しいシェルを使用して実行されます。bashbash -c something そしてそれは言う~/.bashrc

シェルの先頭はbash -c something通常読み込まれません~/.bashrc。 1つの例外は、orまたはonbashで呼び出される場合です。sshdrshdbash -ic something

[ -n "$SSH_CONNECTION" ]事件費用のみを支払う場合は、小切手を追加できますssh

答え3

通常のSolarisインストールではこれを行うことはできません。簡単な回避策は、構成ファイルを変更して目的のシェルを実行することです。

たとえば、/etc/passwdシェルが/bin/bash次を好むとします/bin/ksh

$ tail -2 ~/.bash_profile
export SHELL=/bin/ksh
exec $SHELL

太田や虚偽実行、無限ループに陥るロジックのため慌てないように注意してください。

関連情報