我有一个 Perl Expect.pm脚本,它可以在多个远程 unix 主机上执行一些中等复杂的工作,例如打包应用程序、部署应用程序、检查日志等。
我的前任曾使用 rsh 编写过类似的脚本。
两者之间有更好的方法吗?还是我应该使用不同的东西?
我猜有人会提出SSH;它基本上是 rsh 的替代品,对吧?不幸的是,但是 SSH 现在不是我的选择。
我应该补充的另一件事是,登录后我需要能够对特定用户进行 SUDO 以在远程主机上执行大部分操作。
我应该补充的另一件事是,登录后我需要能够对特定用户进行 SUDO 以在远程主机上执行大部分操作。
为了解决这一点:使用rsh
(或ssh
)您可以指定要在远程会话中成为哪个用户:
$ rsh -l username hostname
sudo
在这种情况下没有必要使用。ssh
由于安全问题,现在肯定是研究的时候了。语法是相同的,但ssh
也允许稍微不同(我会说更好)的语法:
$ ssh username@hostname
我发现expect
太挑剔了,但我的经验并不丰富。
我可以看到多种方法:
考虑到所有因素,这是最次要的骗局,因为您可以简单地做类似的事情
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 存在怎么办等),但这就是想法。
他们做不同的事情。Expect 是一种编写手动响应脚本的方法。rsh -- 远程 shell,不受限制的 shell,不幸的名称冲突 -- 允许您在另一个系统上远程运行命令。
也就是说,使用 rsh 执行远程命令、运行 sudo 等的安全漏洞和其他缺点是巨大的。
如果可以在rsh
和telnet
via之间进行选择expect
,我会选择rsh
. Expect
脚本很脆弱。只需有人更改PS1
远程机器上的值即可。使用rsh
还可以让您为最终进入 90 年代并开始使用的那一天做好准备ssh
(因为您几乎可以更改rcp
toscp
和rsh
tossh
并且一切仍然有效)。