可以告诉 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

相关内容