我可以访问 ServerA ,无法访问 ServerB 。我想从 ServerB获取文件名列表通过serverA。
我使用以下命令登录 ServerA 并执行一些功能。
Net::SSH.start(url, user, forward_agent: true) do |ssh|
ssh.exec('scp -r source dest')
end
但我希望通过 ServerA 从 ServerB 获取文件名。我该怎么办?
Eg: Dir["/path/*.txt"] or ls *.txt
OS: Linux
Language: ruby
答案 0 :(得分:2)
您可以使用ssh执行远程命令:
ssh username@hostname ls -l /foo/bar
如果ls
命令不够,您可以随时使用find
或任何其他命令。
修改强>
这里有一个完整的工作脚本
require 'net/ssh'
Net::SSH.start('localhost', 'user', :password => "password") do |ssh|
stdout = ''
ssh.exec!("ls -l /tmp") do |channel, stream, data|
stdout << data if stream == :stdout
end
puts stdout
end
使用ruby 2.1.2p95
还要确保使用OpenSSL编译ruby:
ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'
编辑2
您需要的是隧道,有关详细信息,请查看official documentation。
require 'net/ssh/gateway'
gateway = Net::SSH::Gateway.new('host', 'user')
gateway.ssh("host.private", "user") do |ssh|
puts ssh.exec!("hostname")
end
gateway.open("host.private", 80) do |port|
Net::HTTP.get_print("127.0.0.1", "/path", port)
end
gateway.shutdown!