![通过 ssh 进行 rsync 并且双方都具有 root 访问权限](https://linux22.com/image/512173/%E9%80%9A%E8%BF%87%20ssh%20%E8%BF%9B%E8%A1%8C%20rsync%20%E5%B9%B6%E4%B8%94%E5%8F%8C%E6%96%B9%E9%83%BD%E5%85%B7%E6%9C%89%20root%20%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90.png)
我有一台较旧的 ubuntu 服务器和一台较新的 debian 服务器,我正在将数据从旧服务器迁移到新服务器。我想使用 rsync 传输数据,使最终迁移比等效的 tar/scp/untar 过程更轻松、更快捷。
例如,我想将主文件夹逐个同步到新服务器。这需要两端都具有 root 访问权限,因为源端并非所有文件都是全局可读的,并且目标必须以正确的权限写入 /home。我不知道如何授予两端的 rsync root 访问权限。
我见过一些相关的问题,但没有一个与我想要做的事情完全匹配。
我已经在两台服务器上设置了 sudo 并且使其运行。
答案1
实际上你不需要通过 SSH 允许 root 身份验证来运行 rsync正如 Antoine 所建议的。只要您可以在两端使用 sudo 运行 rsync 来读取和写入文件,传输和系统身份验证就可以完全通过用户帐户进行。
作为目标服务器上的用户,您可以像这样从源服务器获取数据:
sudo rsync -aPe ssh --rsync-path='sudo rsync' boron:/home/fred /home/
您在两台服务器上运行的用户将需要无密码* sudo 访问 rsync 二进制文件,但您无需在任何地方启用 ssh 以 root 身份登录。如果您使用的用户与另一端不匹配,您可以添加 user@boron: 来指定不同的远程用户。
祝你好运。
*或者您需要在超时窗口内手动输入密码。
答案2
如果您的数据不是高度敏感的,则可以使用tar
和socat
。根据我的经验,这通常比rsync
通过 ssh 更快。
您需要socat
两侧netcat
。
在目标主机上,转到您想要放置数据的目录,然后运行:
socat TCP-LISTEN:4444 - | tar xzf -
如果目标主机正在监听,则在源上启动它,如下所示:
tar czf - /home/fred /home/ | socat - TCP:ip-of-remote-server:4444
对于此设置,您需要在两台服务器之间建立可靠的连接。
答案3
好的,我已经将所有线索拼凑在一起,找到了对我有用的东西。
我们将服务器称为“src”和“dst”。
在目标服务器上为 root 设置密钥对,并将公钥复制到源服务器:
dest $ sudo -i
dest # ssh-keygen
dest # exit
dest $ scp /root/id_rsa.pub src:
将公钥添加到源服务器上 root 的授权密钥中
src $ sudo -i
src # cp /home/tim/id_rsa.pub .ssh/authorized_keys
返回目标服务器,使用 rsync 提取数据:
dest $ sudo -i
dest # rsync -aP src:/home/fred /home/