我有一个Perl Expect.pm脚本,可以在多个远程unix主机上执行一些中等复杂的操作,例如打包应用程序,部署应用程序,检查日志等。
我的前任使用rsh写了类似的脚本。
两者之间有更好的方法吗?或者我应该使用不同的东西吗?
我猜有人会提出SSH;它基本上取代了rsh,对吗?不幸的是,SSH现在不适合我。
我要补充的另一件事是登录后我需要能够对特定用户进行SUDO以执行远程主机上的大部分操作。
答案 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)
我可以看到多种方法:
考虑到所有事情,这是最小的问题,因为你可以简单地做一些像
这样的事情 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)
如果rsh
和telnet
之间通过expect
进行选择,我会选择rsh
。 Expect
脚本很脆弱。只需更改远程计算机上PS1
的值即可。使用rsh
还可以为您最终进入90年代并开始使用ssh
的那一天做好准备(因为您通常只需将rcp
更改为scp
和{{1} } rsh
,一切仍然有效。