システム管理者がログインシェルの変更を拒否するときにbashをログインシェルとして使用する方法

システム管理者がログインシェルの変更を拒否するときにbashをログインシェルとして使用する方法

私が働いているUnixシステム管理者は私のログインシェルをからに変更することはできませんkshbash彼はさまざまな言い訳をしていますが、最も興味深いのは、彼らがすべてのスクリプトを書いたので、ksh私が実行しようとするとうまくいかないということです。その人がこのようなアイデアをどこで得たのかは分かりませんが、彼を説得できないので、他の選択肢があるでしょうか?

chshこのコンピュータにインストールされていますが、公開/秘密鍵のペアを使用してログインし、パスワードがないため、パスワードの入力を求められたchshときに提供するものはありません。)

答え1

ログインすると、~/.profileログインシェル(ksh提供)はこのファイルを読み取ります。ログインシェルをbashに置き換えるように指示できます。取るべきいくつかの予防措置があります。

  • ログインシェルが対話型の場合にのみ変更してください。これは重要です。そうしないと、グラフィカルモードでログインすることが機能しなくなる可能性があります(システムによって異なります。~/.profile一部のシステム(すべてではありません)はxdmまたは同様の方法でログインすると読み取られます)、このような慣用語はssh foo '. ~/.profile; mycommand'失敗します。
  • 何らかの理由で実行可能ファイルが存在しない場合でも、ログインできるようにbashを使用できることを確認してください。

bashをログインシェルとして実行するかどうかを選択できます。ログインシェルにするときの唯一の主な違いは、またはを~/.bash_profileロードすることです~/.profile。そのため、bashをログインシェルとして実行する場合は、非常に注意するか、または実行しないように~/.bash_profile注意してください~/.profile。 ksh~/.profileだから私はこれをしないことをお勧めします。

また、SHELL端末エミュレータなどのプログラムがそのシェルを呼び出すように環境変数を bash に設定します。

bashに切り替えるコードは次のとおりです。最後に保存してください~/.profile

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac

答え2

bashこれは少し面倒ですが、ホームディレクトリに以下を含むファイルを作成し、ログインに使用するシェルにすることができます。.profile

SHELL=`type -P bash`
exec bash -l

kshその後、セッションはセッションに置き換えられますbash。ログインするたびに手動で新しいセッションを開始するのと同じように、exit2回入力する必要はありません。その後、入力^Dbash

echo $SHELL

パスも返されますbash

答え3

Gilesの答えbashを実行するときは、-lフラグを追加して、すべてのログインプロファイルスクリプトを新しいbashシェルで起動する必要があります。 (例:RHELの/etc/profile.d/の内容)これで、スクリプトは次のようになります。

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash" -l
      fi
    fi
esac

答え4

ソラリス:

usermod -s /bin/bash root

関連情報