将文件夹从server1复制到server2,从localhost linux

时间:2016-06-11 13:00:19

标签: ruby ssh rsync

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

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

2 个答案:

答案 0 :(得分:3)

这样您就可以替换根本没有变化的文件。在这种情况下使用rsync会更好。 见rsync backup 或者这个rsync gem如果你真的想使用ruby

答案 1 :(得分:2)

Manoel的答案是正确的方向,但以下是使用rsync的详细信息:

rsync -avz /home/logfiles/* user@my-awesome-backup-machine:/home/backupstorage/
  • rsync适用于SSH,所以如果你的备份服务器上有ssh,那么你就可以了。
  • rsync通过使用增量来备份,也就是说它只复制不同的块,所以第一次运行它可能需要一段时间,但每次之后它只复制已经更改的内容
  • -avz 告诉rsync存档和压缩并且要详细(打印出它对STDOUT做的事情)。
  • 用户是您备份服务器上的用户。
  • my-awesome-backup-machine 是备份服务器的IP地址或主机名。

如果您还要删除主机上不再存在的文件,则可能需要查看 - 删除选项。

scp 有点糟糕,因为您一次复制一个文件。 rsync 非常棒,因为您可以复制整个目录树,递归,排除文件模式等。

<强>更新

根据OP的评论进行更新。

您可以从计算机SSH连接到第一台服务器,然后运行命令将内容复制到第二台服务器。如果您个人可以访问这两台计算机,则可以在计算机上使用SSH的ForwardAgent选项打开SSH,这样当您从server1到server2进行rsync时,它将会回退并尝试使用您的密钥对。参考:https://developer.github.com/guides/using-ssh-agent-forwarding/

如果您不想打开SSH代理转发,可以在server1上为用户生成一个新的密钥对,并将公钥放在您同步的用户的~/.ssh/authorized_keys文件中。 ;像在server2上一样。

另一个选项而不是使用密钥将在server2上启用基于主机的身份验证。这样可以避免生成密钥对。