2016-06-11 66 views
1

我想在ruby中创建一个备份脚本,但我没有找到任何将文件夹/文件从实例复制到另一个运行我脚本的实例的解决方案本地主机。类似这样的:从server1复制文件夹到server2从本地主机运行脚本linux

Net::SSH.start("ip_address", "username",:password => "*********") do |session| 
    session.scp.download!("/home/logfiles/*", "/home/backupstorage", :recursive => true) 
end 
+0

FTP会更好吗?似乎文件传输是它的目的。 –

回答

3

这样你就可以替换完全没有改变的文件。在这种情况下使用rsync会更好。 见rsync backup 或本rsync gem,如果你真的想用红宝石

+0

是的,我肯定会使用rsync,但我想在两台服务器之间使用这个脚本,并从本地主机运行此脚本(这是我需要帮助的部分) –

+0

为什么从您的本地主机?你不能把它放在其中一台机器上,并用cron作业启动它吗? 您也可以使用ssh执行远程命令。看到它[这里](http://www.cyberciti.biz/faq/unix-linux-execute-command-using-ssh/) –

+0

是伟大的ideea,谢谢它的工作,我用Net :: SSH解决了这个问题NFS服务器并从目标机器上的系统(rsync .....)。 –

2

马诺埃尔的答案是正确的方向,但在这里是使用rsync的详细信息:

rsync -avz /home/logfiles/* [email protected]:/home/backupstorage/ 
  • rsync的作品通过SSH,所以如果你在你的备份服务器上有ssh,那么你将会好起来
  • rsync通过使用deltas来备份,也就是它只复制不同的块,所以第一次运行它可能需要一段时间,但是每一次时间之后,它只能复制r已经改变的东西
  • -avz告诉rsync归档和压缩并且是详细的(打印出它对STDOUT做了什么)。
  • 用户是您的备份服务器上的用户。
  • my-awesome-backup-machine是备份服务器的IP地址或主机名。

如果你想同时删除不再在主机上的文件,那么你可能要考虑使用--delete选项。

scp因为您一次复制文件而很糟糕。 rsync的是真棒,因为你可以根据下面的OP的评论复制整个目录树,递归,排除文件模式,等等

UPDATE

更新。

您可以从您的计算机SSH进入第一台服务器,然后运行该命令将事物复制到第二台服务器。如果您亲自访问这两台计算机,则可以在计算机上使用SSH的ForwardAgent选项启用SSH转发,以便在从server1到server2的rsync时,它会回退并尝试使用您的密钥对。参考:https://developer.github.com/guides/using-ssh-agent-forwarding/

如果你不想打开SSH代理转发您可以生成Server1上的用户一个新的密钥对,把公钥在~/.ssh/authorized_keys文件你作为rsync'ing用户服务器2。

另一种选择,而不是使用密钥将打开server2上的基于主机的身份验证。这将允许您避免必须生成密钥对。

+0

是的,我肯定会使用rsync,但我想在两台服务器之间使用它,并从我的本地主机运行此脚本(这是我需要帮助的部分) –

+0

我已经用更多信息更新了答案。你有所有的部分,你只需要把它们使用。祝你好运。 –

相关问题