j.f*_*ajo 5 ruby ssh ruby-on-rails net-ssh
我想通过另一台使用 ruby 连接到远程计算机。
该方案如下:
本地->代理->远程
我有这段代码正在执行直接访问的工作:
require 'net/ssh'
Net::SSH.start(remote_host, remote_user) do |ssh|
puts ssh.exec!'hostname'
end
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用代理时,命令“主机名”被执行并且正确,但随后代码冻结,如果我调用 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
Run Code Online (Sandbox Code Playgroud)
借助 rsa 密钥,无需密码即可登录。并且 proxy 命令正在工作(我之前在 bash 中使用过它)
有人知道我做错了什么吗?
非常感谢您的关注,
编辑:这是日志中的最后一行,它在那里阻塞:
I, [2013-10-16T23:01:19.304778 #3785] INFO -- net.ssh.connection.session[4555128]: closing remaining channels (0 open)
Run Code Online (Sandbox Code Playgroud)
小智 4
我刚刚遇到了同样的问题 - 命令行 ssh 正在工作,并且在使用 proxycommand 时 net/ssh 挂在我身上。
调试 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
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |