使用 Unison / rsync 通过 SSH 同步需要完整文件系统访问权限但禁用 root 登录的站点

使用 Unison / rsync 通过 SSH 同步需要完整文件系统访问权限但禁用 root 登录的站点

假设两个站点A两端均有文件服务器。 的内容/storage应在站点之间同步,保留所有权和权限。 没有一个包罗万象的组拥有 中的所有文件/storage。 如果运行 Unison 或 rsync pid=0,则同步很简单。 但是 SSH 将用作传输,出于显而易见的原因,两端都已禁用 SSH 根登录。

在这种情况下,如何保持 A 和 B 同步并保留所有权限。我能想到两种方法:

  • 运行允许 root 登录的辅助 SSH,但只能通过 A 和 B 之间的 VPN 连接。
  • 添加一个特殊的同步用户,其 sshd 配置强制执行
    • SUID 包装器到 Unison 或 rsync(做对事很危险)。
    • sudo包装到 Unison 或 rsync

问题的答案通过 ssh 远程使用 root 进行 unison建议通过 SSH 启用无密码公钥根登录 – 我不太喜欢这个解决方案。

还有其他想法吗?

答案1

通过 SSH 使用公钥 root 登录可能是最好的选择。您还可以将此访问限制为单个主机:

AllowUsers [email protected]

甚至使用Match指令来获取给定内容(地址、用户等)的唯一配置:

Match Address 192.0.2.123
    PasswordAuthentication no
    RSAAuthentication yes
    PubkeyAuthentication yes
    PermitRootLogin yes

答案2

如何以 root 身份运行远程 unison 实例:

远端

  • 不要触碰你的 sshd 配置,尤其是不要创建任何特殊同步[ssh]用户正如你在问题中所述

  • 创建 sudo 包装器vi sunison

#!/data/data/com.termux/files/usr/bin/bash
su --preserve-environment -c `which unison` "$@"

(是的,这是针对 Termux 环境的,可根据您的需要简化)

客户端

  • 与...齐头并进-servercmd sunison
  • 或添加到您的 unison 个人资料servercmd = sunison

笔记

  • 类似的东西servercmd = sudo unison最好,但它对我来说不起作用

相关内容