>通过从一台服务器发送文件名来复制文件,该服务器除日志文件外只有其他服务器.
>我需要传递服务器密码作为参数.
>一切都在后台发生,这是从Ruby脚本触发的.
解决方法
来自Net::SCP文档:
Net::SCP implements the SCP (Secure CoPy) client protocol,allowing Ruby programs to securely and programmatically transfer individual files or entire directory trees to and from remote servers. It provides support for multiple simultaneous SCP copies working in parallel over the same connection,as well as for synchronous,serial copies.
Net::SCP also provides an open-uri tie-in,so you can use the Kernel#open method to open and read a remote file:
# if you want to read from a URL voa SCP: require 'uri/open-scp' puts open("scp://user@remote.host/path/to/file").read
从Net::SSH文档:
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")
在上面的代码中添加一个结尾以关闭块.在块内,输出将包含您发送的命令的结果.
从包含文件的机器通过Ruby检索文件的替代方法是让Ruby直接从托管文件的机器启动传输,并通过scp将它们推送到另一台机器.
您可以使用Net::SFTP在一个gem中管理它,而不是使用Net :: SCP和Net :: SSH.它也依赖于安全连接,但您可能无法使用SFTP. Net :: SFTP :: Operations :: Dir和Net :: SFTP :: Operations ::下载类和文档将成为您的朋友.
其他选项包括在@tadman提到的简单shell中使用标准rsync.有许多方法可以实现这一点,这是托管环境中的常见需求.
any other better approach?
rsync,在命令行.它非常智能,可以根据需要移动文件夹和文件的增量.另外,“How to transfer files using ssh and Ruby”及其与“Ruby file upload ssh intro”的链接.
Melding @ tadman对Ruby的rsync推荐,有“Cheapest rsync replacement (with Ruby)”.