0

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

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

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

4

4 回答 4

5

也许您可以在希望运行的运行之前放置一个调用ssh的命令。PATHsshssh

于 2009-11-03T14:11:48.213 回答
3

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

我最近不得不这样做,iostat因为新版本输出了第三方产品无法处理的不同格式(它扫描输出以生成报告)。

我刚刚创建了一个iostat名为 real 的 shell 脚本iostat(使用硬编码路径,但你可以更复杂),通过awk脚本传递输出以将其按摩成原始格式。然后,我更改了第三方程序的路径,它开始正常工作。

于 2009-11-03T14:12:26.013 回答
3

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

Host *
  PubkeyAuthentication no
于 2009-11-03T14:16:38.540 回答
0

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

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

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

于 2009-11-03T14:17:29.590 回答