Net::OpenSSH::Gateway->find_gateway 在设置 ControlPersist 选项时失败

Posted

技术标签:

【中文标题】Net::OpenSSH::Gateway->find_gateway 在设置 ControlPersist 选项时失败【英文标题】:Net::OpenSSH::Gateway->find_gateway fails when ControlPersist option is set 【发布时间】:2014-08-18 04:40:30 【问题描述】:

我正在尝试使用 Net::OpenSSH::Gateway 创建持久网关连接。下面是我使用的代码 sn-p。

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 连接:坏 ssh master at /root/.libnet-openssh-perl/spangeni-j1.zscaler.-31930-744378,套接字 由 pid 31933 拥有(应为 pid 31931)

【问题讨论】:

看here也许这有帮助。 我在发布之前看到了。我的 ssh 二进制文件没有包装器。我也提供了 ssh_cmd 选项。 【参考方案1】:

我认为这是模块中的错误。模块Net::OpenSSH::Gateway在CPAN上不存在,作者已经说过:

我还没有在 CPAN 上发布它,因为它已经是 功能性,我发现其内部架构存在一些问题 我想先解决。 -Source

如果您查看Net::OpenSSH 的文档,您会发现网关是一项实验性功能。


顺便说一句,您使用的是哪个版本的OpenSSH? ControlPersist 需要 OpenSSH 5.6 或更高版本。

【讨论】:

我正在使用 OpenSSH_6.1p1。有没有其他方法可以创建一个持久网关并让所有 openSSH 连接都通过这个网关【参考方案2】:

如果您在网关机器上启用了隧道,则根本不需要使用 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"]);

【讨论】:

以上是关于Net::OpenSSH::Gateway->find_gateway 在设置 ControlPersist 选项时失败的主要内容,如果未能解决你的问题,请参考以下文章

MySQL视图和自定义函数

爬取天堂图片网图片并存储

php将获取的数组变成字符串传入txt文本。。。

dvd管理系统

爬取腾讯社招职位信息

爬取腾讯社招职位信息