带有proxycommand的Ruby net-ssh导致冻结

时间:2013-10-16 10:22:25

标签: ruby-on-rails ruby ssh net-ssh

我想使用ruby通过另一台远程计算机连接。

该方案如下:

本地 - >代理 - >远程

我有这个代码正在进行直接访问:

require 'net/ssh'
Net::SSH.start(remote_host, remote_user) do |ssh|
    puts ssh.exec!'hostname'
end

然而,当我尝试使用代理时,命令'hostname'被执行并且正确,但是如果我调用ssh.close,代码就会冻结。

以下是代码:

require 'net/ssh'
require 'net/ssh/proxy/command'

proxy_cmd = Net::SSH::Proxy::Command.new('ssh proxy_user@proxy_host nc %h %p')
Net::SSH.start(remote_host, remote_user, :proxy => proxy) do |ssh|
    puts ssh.exec!'hostname'
end

由于使用了rsa密钥,因此无需密码即可完成登录。并且proxycommand正在运行(之前我在bash中使用它)

有人知道我做错了吗?

非常感谢您的关注,

编辑:这是日志中的最后一行,它会阻止:

I, [2013-10-16T23:01:19.304778 #3785]  INFO -- net.ssh.connection.session[4555128]: closing remaining channels (0 open)

1 个答案:

答案 0 :(得分:1)

我刚刚遇到同样的问题 - 命令行ssh工作正常,net / ssh在使用proxycommand时挂在我身上。

debuging net / ssh把我带到了https://github.com/net-ssh/net-ssh/blob/master/lib/net/ssh/transport/session.rb#L113,整个事情都挂在了套接字的.close调用上。

我不确定是什么导致这种情况,但是向nc命令添加超时似乎已经解决了它:

ProxyCommand ssh proxy_server@proxy_server nc -q 1 %h %p