我只是想使用 rsync 将目录从一台家庭服务器复制到另一台,两台服务器都运行 Ubuntu(9.04 和 9.10)。我遇到的问题是目录(和子目录)中的某些文件归 root 所有。两台机器上的主管理员帐户都是“ben”,因此在旧服务器上运行此命令:
rsync -v -u -a -p -t -rsh=ssh --stats --progress source/ ben@newserver:/dest
提示我输入 ben@newserver 的密码,复制源/但在新目标上所有权限都是“ben”。使用 sudo 运行此命令意味着我可以访问 root 的文件,但在另一端 ben 无法将它们写为属于 root。发送到 root@newserver 会要求输入 root 的密码,而 Ubuntu 不会提供该密码。
有人能简单解释一下如何做到这一点吗?谢谢 :)
答案1
你可以设置 SSH 密钥,并将你的公钥放在 root 的~root/.ssh/authorized_keys2
文件中newserver
。这样,你就可以以 root 身份完成整个过程。
或者,您可以通过以下方式设置 root 密码:
sudo passwd root
但是 SSH 密钥更安全并且(在我看来)更方便。
答案2
您可以使用该--rsync-path
选项在远程计算机上运行sudo rsync
;我怀疑您必须授予ben
用户无密码的 sudo 权限才能运行rsync
,因为将密码提示传回源机器的机会rsync-path
很小。
答案3
为了让 rsync 保留所有文件所有权/权限属性,它需要在写入端以 root 身份运行。如果你只在一端是 root,那么这需要是写入端,因此你需要执行
rsync -v -u -a -p -t -rsh=ssh --stats --progress user@oldserver:source/ /dest/
在新服务器上以 root 身份登录。
这个--fake-super
选项在你把文件发送到一个你没有 root 访问权限的备份位置时很有用(以及之后再取回文件时),但如果没有一些额外的麻烦(使用该选项 rsyncing 到任一服务器上的中间位置,然后也使用它 rsyncing 到最终目的地),那么它就不适用这里。
正如前面提到的,另一个选项是让您的用户在写入端在您的 sudo 配置中以 root 身份无密码访问 rsync。