2009-11-03 76 views
0

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

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

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

回答

3

阿尔特之前运行的Perl脚本,或在您的.ssh使用此路径/配置

Host * 
    PubkeyAuthentication no 
+0

如果你有特定的主机有问题,我会认为这将是首选的方式。然后,可以将主机(或与您的问题主机匹配的掩码)替换为*。 〜/ .ssh/config的文档位于ssh_config(5)中。 – opello 2009-11-03 14:20:12

+0

搞乱之后,我认为.ssh/config选项会更好。我通过IP地址连接到所有问题主机(被告知DNS在这种情况下不可靠 - 完全不同的问题)。但是工作的系统,我使用主机名连接。所以主机10. * PubkeyAuthentication不应该很好地解决问题。 – 2009-11-03 16:29:29

5

也许你可以把一个叫ssh命令PATH未来,只要你想它来运行它运行sshssh的。

+0

好主意!为什么我之前没有想到这一点?无论如何,显然,伟大的思想家都一样 - 我同时得到了两个相同的答案。 – 2009-11-03 14:16:03

3

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

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

我刚刚创建一个iostat shell脚本,堪称真正iostat(用硬编码路径,但你可以更复杂),使输出通过awk脚本按摩到原来的格式。然后,我改变了第三方程序的路径,并开始正常工作。

0

你可以宣布在.bashrc中的函数(或.profile或其他)这个名字。它看起来是这样的(可能破坏):

function ssh { 
    /usr/bin/ssh -o PubkeyAuthentication=no "[email protected]" 
} 

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