使用rsync + ssh +公钥作为不同于ssh密钥所有者的用户同步本地和远程目录

时间:2013-01-16 04:04:31

标签: unix deployment permissions ssh rsync

目标是通过ssh同步本地和远程文件夹。

我当前的用户是 user1 ,我通过ssh对服务器 server1 进行无密码访问设置。 我想通过 rsync 实用程序将本地文件夹与 server1 上的文件夹同步。 通常我会跑:

rsync -rtvz /path/to/local/folder server1:/path/to/remote/folder

ssh 访问按预期工作, rsync 能够通过 ssh 连接,但它返回“权限被拒绝”错误,因为在 server1 文件夹/path/to/remote/folder user2 所有: user2 。该文件夹的文件权限不允许其他任何人更改。 user1 server1 上的sudoer,因此sudo su - user2 ssh 会话期间有效。 当用户 ssh 加入服务器时如何更改 rsync 来切换用户?

user1 添加到组 user2 不是一个选项,因为服务器上的所有用户/组管理都是自动完成的,并且每隔X分钟从中央仓库复制一次,我无法访问。

更改目标文件夹的权限/所有权相同:它会定期自动更新,并重置所有权限。

我想到的可能解决方案是一个脚本,它将本地文件夹与服务器上 user1 所拥有的临时中间远程文件夹同步,然后将两个远程文件夹同步为 user2

谷歌搜索更短,更漂亮的解决方案并没有取得任何成功。

3 个答案:

答案 0 :(得分:5)

我自己没试过,但是如何使用rsync的'--rsync-path'选项呢?

rsync -rtvz --rsync-path='sudo -u user2 rsync' /path/to/local/folder server1:/path/to/remote/folder

答案 1 :(得分:1)

要修复权限问题,您需要通过以user2远程登录的SSH会话运行rsync:

rsync avz -e 'ssh -i privatekeyfile' /path/to/local/folder/ user2@server1:/path/to/local/folder

以下答案说明了如何设置SSH密钥。

答案 2 :(得分:0)

user1 设置无密码访问权限以访问 user2 @ server1 ,然后执行以下操作:

rsync -rtvz /path/to/local/folder user2@server1:/path/to/remote/folder