如何从私有远程ip获取文件名列表

时间:2014-11-10 07:08:29

标签: ruby linux directory net-ssh

我可以访问 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

1 个答案:

答案 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!