【问题标题】:Is it possible to have Perl run shell script aliases?是否可以让 Perl 运行 shell 脚本别名?
【发布时间】:2010-12-12 15:47:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: perl bash ssh ssh-keys


    【解决方案1】:

    也许您可以在PATH 中放置一个名为ssh 的命令,然后将其放在运行sshssh 之前,就像您希望它运行一样。

    【讨论】:

    • 好主意!为什么我之前没有想到呢?无论如何,显然伟大的思想是相似的——我同时得到了两个相同的答案。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      Host *
        PubkeyAuthentication no
      

      【讨论】:

      • 如果您的特定主机有问题,我认为这将是首选方式。然后代替 * 您可以放置​​主机(或与您的问题主机匹配的掩码)。 ~/.ssh/config 的文档在 ssh_config(5) 中。
      • 在搞砸之后,我认为 .ssh/config 选项会更好。我通过 IP 地址连接到所有有问题的主机(被告知在这种情况下 DNS 不可靠 - 一个完全不同的问题)。但是工作的系统,我使用主机名连接。所以 Host 10.* PubkeyAuthentication no 应该可以很好地解决这个问题。
      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-08-25
        • 1970-01-01
        • 2012-06-03
        • 1970-01-01
        • 2014-09-29
        • 2012-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多