将文件夹从 server1 复制到 server2 运行 来自本地主机的脚本 linux

Copy a folder from server1 to server2 running the script from localhost linux

我想在 ruby 中创建一个备份脚本,但我没有找到将 folder/file 从一个实例复制到另一个实例的任何解决方案 运行 来自我本地主机的脚本.像这样:

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

这样您将替换根本没有更改的文件。在这种情况下最好使用 rsync。 参见 rsync backup 或者这个 rsync gem 如果你真的想使用 ruby

Manoel 的回答方向正确,但这里是使用 rsync 的详细信息:

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

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

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

更新

根据下面 OP 的评论进行更新。

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

如果您不想开启 SSH 代理转发,您可以为 server1 上的用户生成一个新的密钥对,并将 public 密钥放入您要访问的用户的 ~/.ssh/authorized_keys 文件中与 server2 上的 rsync'ing 一样。

另一个不使用密钥的选项是在 server2 上启用基于主机的身份验证。这将使您不必生成密钥对。