2

我有一个 Perl Expect.pm脚本,它可以在多个远程 unix 主机上执行一些中等复杂的工作,例如打包应用程序、部署应用程序、检查日志等。

我的前任曾使用 rsh 编写过类似的脚本。

两者之间有更好的方法吗?还是我应该使用不同的东西?

我猜有人会提出SSH;它基本上是 rsh 的替代品,对吧?不幸的是,但是 SSH 现在不是我的选择。

我应该补充的另一件事是,登录后我需要能够对特定用户进行 SUDO 以在远程主机上执行大部分操作。

4

4 回答 4

4

我应该补充的另一件事是,登录后我需要能够对特定用户进行 SUDO 以在远程主机上执行大部分操作。

为了解决这一点:使用rsh(或ssh)您可以指定要在远程会话中成为哪个用户:

$ rsh -l username hostname

sudo在这种情况下没有必要使用。ssh由于安全问题,现在肯定是研究的时候了。语法是相同的,但ssh也允许稍微不同(我会说更好)的语法:

$ ssh username@hostname

我发现expect太挑剔了,但我的经验并不丰富。

于 2009-04-21T00:23:52.537 回答
3

我可以看到多种方法:

  • 期望通过 telnet、rsh 或 ssh
    • 优点:单一连接,更少的转义问题
    • 缺点:在不断变化的环境中脆弱
  • rsh/ssh 每个命令单独
    • 优点:逃逸问题更少,在不断变化的环境中更可靠
    • 缺点:每个连接都需要时间进行身份验证,对于 ssh,握手加密
  • 一次 rsh/ssh 所有命令
    • 优点:单连接(开销更少),比预期更可靠
    • 缺点:维护中的脆弱性,特别是当您在那里获得多个语句时,转义问题更为普遍(在 perl 中转义,以便它仍然被 rsh/ssh 转义,因此它仍然被远程 shell 转义,以便正确处理通过 sudo 的远程外壳?)
  • rsh/ssh 并运行脚本
    • 优点:单连接,更可靠,更易维护
    • 缺点:找到一种方法来获取它(rcp/scp 工作,NFS 工作,你需要确定最适合你的方法)。

考虑到所有因素,这是最次要的骗局,因为您可以简单地做类似的事情

 open my $fh, "|ssh user@host 'cat > /tmp/myscript'";
 print $fh $script;
 system qw(ssh user@host), "chmod u+x /tmp/myscript; /tmp/myscript; rm /tmp/myscript";

当然,您会添加一些错误处理(打开失败、如果 /tmp/myscript 存在怎么办等),但这就是想法。

于 2009-04-22T13:10:47.007 回答
3

他们做不同的事情。Expect 是一种编写手动响应脚本的方法。rsh -- 远程 shell,不受限制的 shell,不幸的名称冲突 -- 允许您在另一个系统上远程运行命令。

也就是说,使用 rsh 执行远程命令、运行 sudo 等的安全漏洞和其他缺点是巨大的。

于 2009-04-20T23:50:47.877 回答
2

如果可以在rshtelnetvia之间进行选择expect,我会选择rsh. Expect脚本很脆弱。只需有人更改PS1远程机器上的值即可。使用rsh还可以让您为最终进入 90 年代并开始使用的那一天做好准备ssh(因为您几乎可以更改rcptoscprshtossh并且一切仍然有效)。

于 2009-04-20T23:59:17.417 回答