rsh与Perl的Expect.pm有什么优势?

时间:2009-04-20 23:46:26

标签: perl unix expect remote-administration rsh

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

我的前任使用rsh写了类似的脚本。

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

我猜有人会提出SSH;它基本上取代了rsh,对吗?不幸的是,SSH现在不适合我。

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

4 个答案:

答案 0 :(得分:4)

  

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

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

$ rsh -l username hostname

在这种情况下,无需使用sudo。现在肯定是因安全问题调查ssh的时候了。语法是一样的,但ssh也允许稍微不同(我会说更好)的语法:

$ ssh username@hostname

我发现expect过于挑剔,但我对它的体验并不重要。

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

我可以看到多种方法:

  • 期待通过telnet,rsh或ssh
    • 专业人士:单一连接,更少逃避问题
    • 缺点:在不断变化的环境中脆弱
  • rsh / ssh各个命令
    • 专业人士:更少的逃避问题,在不断变化的环境中更可靠
    • 缺点:每个连接都需要时间进行身份验证,对于ssh,需要握手加密
  • rsh / ssh所有命令一次
    • 专业人士:单一连接(开销较少),比预期更可靠
    • 缺点:维护中的脆弱性,特别是当你在那里得到多个语句时,逃避问题更为普遍(在perl中逃脱,以便它仍然被rsh / ssh逃脱,以便它仍然被远程shell转义,以便它是由sudo'd远程shell正确处理的?)
  • 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存在,等等),但这就是想法。

答案 3 :(得分:2)

如果rshtelnet之间通过expect进行选择,我会选择rshExpect脚本很脆弱。只需更改远程计算机上PS1的值即可。使用rsh还可以为您最终进入90年代并开始使用ssh的那一天做好准备(因为您通常只需将rcp更改为scp和{{1} } rsh,一切仍然有效。