查看Net::SCP http://rubydoc.info/gems/net-scp/frames and Net::SSH http://rubydoc.info/gems/net-ssh/frames宝石。第一个可让您使用安全副本检索文件,第二个可让您轻松找到可检索的文件的名称。在 Net::SSH 中,ssh.exec!
将成为你的朋友。
来自Net::SCP http://rubydoc.info/gems/net-scp/frames docs:
Net::SCP 实现了 SCP(Secure CoPy)客户端协议,允许 Ruby 程序以编程方式安全地在远程服务器之间传输单个文件或整个目录树。它支持通过同一连接并行工作的多个同步 SCP 副本,以及同步串行副本。
Net::SCP 还提供了 open-uri 搭配,因此您可以使用 Kernel#open 方法打开和读取远程文件:
# if you want to read from a URL voa SCP:
require 'uri/open-scp'
puts open("scp://[email protected] /cdn-cgi/l/email-protection/path/to/file").read
来自Net::SSH http://rubydoc.info/gems/net-ssh/frames docs:
require 'net/ssh'
Net::SSH.start('host', 'user', :password => "password") do |ssh|
# capture all stderr and stdout output from a remote process
output = ssh.exec!("hostname")
Add an end
使用上面的代码来关闭块。街区内,output
将包含您发送的命令的结果。
通过 Ruby 从包含文件的计算机检索文件的另一种方法是让 Ruby 直接从托管文件的计算机发起传输并通过scp
到另一台机器。
您可以使用而不是使用 Net::SCP 和 Net::SSH网络::SFTP http://rubydoc.info/gems/net-sftp/frames,在一个 gem 中管理这一切。它也依赖于安全连接,但您可能无法使用 SFTP。这Net::SFTP::Operations::Dir
and Net::SFTP::Operations::Download
课程和文档将是你的朋友。
其他选项包括使用标准rsync
正如 @tadman 提到的,在一个简单的 shell 中。有多种方法可以实现这一点,这是托管环境中的常见需求。
还有其他更好的方法吗?
rsync
,在命令行中。它非常智能,可以根据需要移动文件夹和文件增量。还, ”如何使用 ssh 和 Ruby 传输文件 http://www.rubyinside.com/how-to-transfer-files-using-ssh-and-ruby-512.html”及其链接到“Ruby 文件上传 ssh 介绍 http://www.infoq.com/articles/ruby-file-upload-ssh-intro".
融合@tadman的rsync
推荐用Ruby,有“最便宜的 rsync 替代品(使用 Ruby) http://snippets.dzone.com/posts/show/1812".