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 选项时失败的主要内容,如果未能解决你的问题,请参考以下文章