我想在ruby中创建一个备份脚本,但我没有找到任何解决方案将文件夹/文件从实例复制到另一个从我的localhost运行脚本的实例。像这样:
Net::SSH.start("ip_address", "username",:password => "*********") do |session|
session.scp.download!("/home/logfiles/*", "/home/backupstorage", :recursive => true)
end
答案 0 :(得分:3)
这样您就可以替换根本没有变化的文件。在这种情况下使用rsync会更好。 见rsync backup 或者这个rsync gem如果你真的想使用ruby
答案 1 :(得分:2)
Manoel的答案是正确的方向,但以下是使用rsync的详细信息:
rsync -avz /home/logfiles/* user@my-awesome-backup-machine:/home/backupstorage/
如果您还要删除主机上不再存在的文件,则可能需要查看 - 删除选项。
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上启用基于主机的身份验证。这样可以避免生成密钥对。