是否有可能让Perl运行shell脚本别名?

时间:2009-11-03 14:08:38

标签: perl bash ssh ssh-keys

是否可以让Perl脚本运行shell别名?我遇到的情况是我们有一个我无法修改的Perl模块,它所做的一件事是通过SSH登录到多个服务器以远程运行一些命令。遗憾的是,有些系统(我也无权修改)有一个错误的SSH服务器,一旦我的系统尝试发送SSH公钥就会断开连接。我有SSH代理运行,因为我需要它连接到其他一些服务器。

我的初始解决方案是设置别名以将ssh设置为ssh -o PubkeyAuthentication = no,但Perl运行它在PATH中找到的ssh二进制文件,而不是尝试使用别名。

当我连接到问题服务器或覆盖执行实际连接的Perl模块时,看起来唯一的解决方案是禁用SSH代理。

4 个答案:

答案 0 :(得分:5)

也许您可以在ssh之前的PATH中放置一个名为ssh的命令,该命令运行ssh,因为您希望它运行。{/ p>

答案 1 :(得分:3)

为什么不跳过别名,只是在某个目录中创建一个名为ssh的shell脚本,然后更改路径以将该目录放在包含真实ssh的目录之前?

我最近必须使用iostat执行此操作,因为新版本输出的格式与第三方产品无法处理的格式不同(它扫描输出以生成报告)。

我刚刚创建了一个iostat shell脚本,它调用了真正的iostat(带有硬编码路径,但你可以更复杂),将输出传递给{{ 1}}脚本将其按原始格式。然后,我改变了第三方程序的路径,它开始正常工作。

答案 2 :(得分:3)

在运行perl脚本之前更改PATH,或在.ssh / config中使用它

Host *
  PubkeyAuthentication no

答案 3 :(得分:0)

您可以使用该名称声明.bashrc(或.profile或其他)中的函数。它可能看起来像这样(可能会破坏):

function ssh {
  /usr/bin/ssh -o PubkeyAuthentication=no "$@"
}

但在您的情况下,使用配置文件可能是最佳解决方案。