我正在尝试使用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选项,整个程序就可以正常工作了。
无法建立主SSH连接的错误: pid 31933所拥有的/root/.libnet-openssh-perl/spangeni-j1.zscaler.-31930-744378,套接字上的ssh母版错误(pid 31931预期)
发布于 2014-06-27 08:14:45
我想是模块里的一个窃听器。在CPAN上不存在模块Net::OpenSSH::Gateway,作者已经说过:
我还没有在CPAN上发布它,因为即使它已经可以使用,我还是发现了它的内部架构的一些问题,我想首先解决这些问题。-来源
而且,如果您看到Net::OpenSSH的文档,您将看到网关是一个实验性的特性。

顺便问一下,您使用的是什么版本的OpenSSH?ControlPersist需要OpenSSH 5.6或更高版本。
发布于 2014-06-28 07:52:45
如果在网关机器上启用了隧道,则根本不需要使用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"]);https://stackoverflow.com/questions/24445573
复制相似问题