![使用 Unison / rsync 通过 SSH 同步需要完整文件系统访问权限但禁用 root 登录的站点](https://linux22.com/image/656836/%E4%BD%BF%E7%94%A8%20Unison%20%2F%20rsync%20%E9%80%9A%E8%BF%87%20SSH%20%E5%90%8C%E6%AD%A5%E9%9C%80%E8%A6%81%E5%AE%8C%E6%95%B4%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90%E4%BD%86%E7%A6%81%E7%94%A8%20root%20%E7%99%BB%E5%BD%95%E7%9A%84%E7%AB%99%E7%82%B9.png)
假设两个站点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
最好,但它对我来说不起作用