我正在尝试使用Net :: OpenSSH :: Gateway创建持久网关连接。下面是我正在使用的代码片段。
my %proxy_opts = (
host => $host,
port=>$port,
password=>$password,
user=>$user ,
scheme=>"ssh",
ssh_cmd => '/usr/bin/ssh',
master_opts =>
[ -o=>"StrictHostKeyChecking=no",
-o=>"TCPKeepAlive=no",
-o=>"ServerAliveInterval=30",
-o=>"ServerAliveCountMax=90",
-o=>"ControlPath=/tmp/ssh-master-%h_%p_%r",
-o=>"ControlPersist=yes"
]
);
my %gateway_settings = ( proxies=>[ {%proxy_opts} ]);
my $gateway = Net::OpenSSH::Gateway->find_gateway(%gateway_settings, errors=>$errors);
我收到以下错误。但是,如果我删除ControlPath和ControlPersist选项,整个过程都可以正常工作。
[ERROR]无法建立主SSH连接:错误的ssh master at /root/.libnet-openssh-perl/spangeni-j1.zscaler.-31930-744378,socket 由pid 31933(预期的pid 31931)拥有
答案 0 :(得分:2)
我认为这是模块中的一个错误。模块Net::OpenSSH::Gateway
在CPAN上不存在,作者已经说过:
我还没有在CPAN上发布它,因为即使它已经存在了 功能,我发现它的内部架构存在一些问题 我想先解决。 - Source
如果你看到Net::OpenSSH
的文档,你会发现该网关是一个实验性功能。
BTW您使用的OpenSSH
版本是什么? ControlPersist需要 OpenSSH 5.6 或更新。
答案 1 :(得分:0)
如果您在网关机器上启用了隧道,则根本不需要使用Net :: OpenSSH :: Gateway。
my $ssh_g=Net::OpenSSH->new($gateway);
my $proxy_command=$ssh_g->make_remote_command({tunnel => 1}, $host, 22);
my $ssh=Net::OpenSSH->new($host,
master_opts => [-o => "ProxyCommand=$proxy_command"]);