我可以访问 ServerA 但不能访问 ServerB。我想从 ServerB 获取文件名列表通过服务器A。
我正在使用以下命令登录到 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
最佳答案
您可以使用 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!
关于ruby - 如何从私有(private)远程 ip 获取文件名列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26838490/