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

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 に特定のシェルを使用するように指示し、ユーザー プロファイルまたはログイン ファイルを読み取らないようにする方法があるかどうかです。

答え1

可能であれば、アプリケーションで 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(これは、対話型非ログイン シェルによってロードされるファイルでもあります)。これを に入れて、csh をエミュレートする関数を.bashrc定義できます。setenv

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

答え2

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

試す:

rsh MACHINE csh -c '<your command>'

答え3

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

誰かがシェルとパスワードなしでシステム アカウントを使用してログインしようとしたらどうなるか想像してみてください/bin/nologin。rshd (または他のプログラム) がこのような基本的なセキュリティを無視できるようになれば、大変なことになります。

ユーザーのシェル (それが何であれ) を経由して、そこからコマンドを実行する必要があります。コマンドが 1 つの場合は、rsh にその作業を実行させます。

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

ソース:ウィキペディア

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

関連情報