web-dev-qa-db-ja.com

RSHに特定のシェルを使用するように指示できますか

次のようなRSHシーケンスを起動するシステムコマンドを起動するc ++アプリケーションを使用しています。

rsh MACHINE \"setenv DISPLAY machine:0;setenv TESTVALUE1 'test';setenv scenTime 0;setenv simName 'name';/devel/test/run.sh\"

問題は、このコードがcsh固有であり、私のシェルがbashであるということです。したがって、setenv variable valueなどのコマンドはexport variable=valueなどである必要があります。

私の質問は、rshに特定のシェルを使用し、ユーザープロファイルやログインファイルを読み取らないように指示する方法はありますか?

2
Jeef

可能であれば、アプリケーションでcsh構文ではなくsh構文を使用するようにします。 Cshは今世紀にごく少数の人々によって使用され、デフォルトでインストールされないことがよくあります。 Shが標準です。実際、このような単純なコマンドの場合、シェルを気にする必要はありません。envプログラムを呼び出すだけです。

rsh MACHINE "env DISPLAY=machine:0 TESTVALUE1='test' scenTime=0 simName='name' /devel/test/run.sh"

アプリケーションを変更できないが、シェルがbashである場合は、bashの癖を使用できます。これは、非対話型ログインシェルであり、その親プロセスがrshdまたはsshdの場合です。 、bashは~/.bashrcを実行します(これは、対話型の非ログインシェルによってロードされるファイルでもあります)。これを.bashrcに入れて、cshをエミュレートするsetenv関数を定義できます。

if [[ $- != *i* ]]; then
  # Non-interactive Shell
  setenv () {
    export "$1=$2"
  }
  return
fi

すべてのコマンドを引数として-cオプションに渡すことができます。

試してみてください:

rsh MACHINE csh -c '<your command>'
1
cuonglm

簡単な答え:いいえ、/etc/profileにあるものをスキップすることはできず、/etc/passwdで指定されているシェルは神聖です。

誰かがShell/bin/nologinを使用し、パスワードなしでシステムアカウントを使用してログインしようとすると、どうなるか想像してみてください。 rshd(または他のプログラム)がそのような基本的なセキュリティを無効にすることを許可された場合、それは惨事になります。

ユーザーのシェル(それが何であれ)を通過し、そこからコマンドを実行する必要があります。単一のコマンドの場合:rshにそれを実行するように依頼します。

rsh -l remoteuser Host.example.com "mkdir testdir"

出典: ウィキペディア

Rshの不安定さをご存知であり、sshを使用する方がよいと思います。特に自動化されたプロセスでは、公開鍵認証を利用できるためです。 (したがって、パスワードを無効にしたり、暗号化されていないパスワードをプログラムに保存したりする必要はありません。)プログラムを libssh2 に対してリンクすることもできます。

0
Tim