2009-04-20 76 views
2

我有一个Perl Expect.pm脚本,它执行一些中等复杂的东西,比如在多个远程Unix主机上打包应用程序,部署应用程序,检查日志等。rsh与Perl的Expect.pm有什么优势?

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

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

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

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

回答

3

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

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

+0

但是期望也允许远程登录到远程系统,这是我目前使用它的方式,所以它看起来像做了rsh所做的一切,等等。那么为什么我会使用rsh? – 2009-04-20 23:52:24

+0

上帝,你不会的。可悲的是,telnet引发了相同的问题 - 比如你的密码在你的telnet会话中以明文形式漫游。 – 2009-04-20 23:56:21

+0

是真的,我知道安全问题会出现,事实上我喜欢perl期望的一个原因是我可以简单地将初始登录线路从telnet更改为SSH,因为我已经有了它,我的脚本应该继续保持原样。所以基本上你可以看到没有理由使用rsh在这一点上? – 2009-04-21 00:00:15

2

如果在rshtelnet之间选择通过expect,我会选择rshExpect脚本很脆弱。所有它需要打破一个是有人在远程机器上更改PS1的值。使用rsh也为您准备好一天,最终将进入90年代,并开始使用ssh(因为您可以主要将rcp改为scprsh改为ssh并且一切仍然有效)。

4

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

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

$ rsh -l username hostname 

没有必要在这种情况下使用sudo。由于安全问题,现在肯定是时间考虑ssh。语法是相同的,但ssh也可以让一个稍微不同的(我会说好)语法:

$ ssh [email protected] 

我发现expect过于挑剔,但我有这方面的经验还不够充分。

3

我可以看到这样做的多种方式:

  • 期待通过telnet,rsh或SSH
    • 优点:单连接,减少逃避问题
    • 缺点:脆弱性在不断变化的环境
  • rsh/ssh each each individual
    • 优点:较少的逃避问题,在不断变化的环境中更可靠
    • 缺点:每个连接需要时间的验证,而且,对于SSH,在一次 握手加密
  • RSH/SSH的所有命令
    • 优点:单个连接(减少开销),更可靠的比预期
    • 缺点:脆弱性的维护尤其是当你获得比在那里语句屈指可数,逃避问题比较普遍(在Perl逃脱这样,它仍然是通过rsh/ssh转义所以,它的由远程shell还是逃了出来,这样它是由sudo'd远程shell妥善处理)
  • RSH/SSH和运行脚本
    • 优点:单一的连接,更可靠,更可维护的
    • 缺点:找到一种方法让它在那里(rcp/scp工作,NFS工作,你需要为你确定最好的方法)。

所有的事情考虑,这是最轻微的骗子,你可以简单地做这样的事情

open my $fh, "|ssh [email protected] 'cat > /tmp/myscript'"; 
print $fh $script; 
system qw(ssh [email protected]), "chmod u+x /tmp/myscript; /tmp/myscript; rm /tmp/myscript"; 

当然,你会在一些错误处理添加(未能打开,如果有什么/ tmp/myscript存在等),但这就是主意。