是否可以让Perl脚本运行shell别名?我遇到的情况是我们有一个我无法修改的Perl模块,它所做的一件事是通过SSH登录到多个服务器以远程运行一些命令。遗憾的是,有些系统(我也无权修改)有一个错误的SSH服务器,一旦我的系统尝试发送SSH公钥就会断开连接。我有SSH代理运行,因为我需要它连接到其他一些服务器。
我的初始解决方案是设置别名以将ssh设置为ssh -o PubkeyAuthentication = no,但Perl运行它在PATH中找到的ssh二进制文件,而不是尝试使用别名。
当我连接到问题服务器或覆盖执行实际连接的Perl模块时,看起来唯一的解决方案是禁用SSH代理。
答案 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 "$@"
}
但在您的情况下,使用配置文件可能是最佳解决方案。