可以告訴 RSH 使用特定的 shell

可以告訴 RSH 使用特定的 shell

我正在使用一個 C++ 應用程序,它會觸發一個啟動 RSH 序列的系統命令,例如:

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

問題是這段程式碼是csh特定的,而我的 shell 是bash.因此,諸如setenv variable valueneed beexport variable=value等命令。

我的問題是有沒有辦法讓 rsh 使用特定的 shell 而不是讀取使用者設定檔或登入檔案?

答案1

如果可以,請讓應用程式使用 sh 語法而不是 csh 語法。本世紀很少有人使用 Csh,通常不會預設安裝。 Sh是標準。事實上,對於這樣一個簡單的命令,您甚至不需要關心 shell:您只需呼叫該env程式即可。

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

如果您無法更改應用程序,但您的 shell 是 bash,則可以使用 bash 的特性:當它是非互動式登入 shell 且其父進程是rshd或時sshd,bash 會運行~/.bashrc(這也是交互式登入shell 載入的文件)非登入 shell)。您可以將其放入.bashrc定義一個setenv模擬 csh 的函數中:

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

答案2

您可以將所有命令作為參數傳遞給-c選項。

嘗試:

rsh MACHINE csh -c '<your command>'

答案3

簡單的答案:不,你不能跳過其中的內容/etc/profile,而指定的 shell/etc/passwd是神聖的。

/bin/nologin想像一下,如果有人嘗試使用帶有 shell且沒有密碼的系統帳戶登錄,會發生什麼。如果允許 rshd(或任何其他程序)推翻這種基本安全性,那將是一場災難。

您必須進入您的使用者 shell(無論它是什麼)並從那裡執行您的命令。如果它是單一命令:請讓 rsh 為您執行此操作。

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

來源:維基百科

我假設您知道 rsh 的不安全性並且最好使用 ssh。特別是在自動化流程中,因為您可以利用公鑰身份驗證。 (因此您不需要停用任何密碼或在程式中儲存未加密的密碼。)您甚至可以嘗試將您的程式連結到libssh2

相關內容