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

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

私はRSHシーケンスを開始するシステムコマンドをトリガするC ++アプリケーションを扱っています。たとえば、次のようになります。

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

問題は、このコードはcsh私のシェルにのみ適用されるため、needbashのようなコマンドが必要であることです。setenv variable valueexport 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機能を使用できます。 bashは非対話型ログインシェルで、親プロセスがrshdor(対話型ログインによってロードされたファイルでもある)の場合にsshd実行されます。~/.bashrcshell)非ログインシェル)。これを模擬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(または他のプログラム)がこの基本的なセキュリティを無視することを許可されている場合、これは災害になります。

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

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

源泉:ウィキペディア

私はあなたがrshの不安定性を知っていると仮定し、sshを使用する方が良いと仮定します。特に自動化されたプロセスでは、公開鍵認証を利用できます。 (したがって、プログラムでパスワードを無効にしたり、暗号化されていないパスワードを保存する必要はありません。)プログラムを次のように関連付けることもできます。libssh2

関連情報