![使用 rsync 和 sudo 从远程系统读取受限文件](https://linux22.com/image/657208/%E4%BD%BF%E7%94%A8%20rsync%20%E5%92%8C%20sudo%20%E4%BB%8E%E8%BF%9C%E7%A8%8B%E7%B3%BB%E7%BB%9F%E8%AF%BB%E5%8F%96%E5%8F%97%E9%99%90%E6%96%87%E4%BB%B6.png)
远程系统每 5 分钟生成一次统计文件,并将其放在某个目录中。任何时候,该目录中都有 1000 多个文件。每 5 分钟,我想将最新文件复制到我的服务器进行分析。我遇到的问题是远程系统上的文件不是“所有人都”可以读取的,而远程系统管理员不想让我访问可以读取这些文件的登录名,因为该登录名具有我不需要的写权限。
系统管理员不介意授予我整个系统的“读取”权限。
我每 5 分钟成功使用过一次此命令:
rsync -az -e "ssh -tt" --rsync-path="sudo rsync" REMOTE_SYSTEM:/var/logs/ .
我没有权限访问 /etc/sudoers,所以我不知道“tty_require”和“tty_tickets”的具体设置。当我最初设置它时-t没有用,但是-tt是的……不确定具体的区别。
此命令已经工作了几个月,直到我们将本地服务器从 Redhat5.11 升级到 CentOS6.6。现在我收到一个错误:
tcgetattr: Invalid argument
unexpected tag 87 [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(1134) [receiver=3.0.6]
两台服务器在升级过程中,RSYNC 版本/协议相同。随着 CentOS 升级,SSH 版本从 OpenSSH_4.3p2 更改为 OpenSSH_5.3p1。
Google 没有给出“标签 87”的任何信息。在远程系统上更改 sudoers 很困难。
我并不执着于这个解决方案,但它在升级之前就运行良好,并且满足要求。如果我可以通过调整我这边的选项来解决问题,那么这比让系统管理员在他们那边进行更改要好得多。我想我可以提取 RSYNC 源代码并调试/修补该问题,但调整选项更可取。
欢迎其他建议!
答案1
我认为你不能ssh -tt
与 rsync 一起使用。
来自 RedHat Bugzilla (错误 1019923,创建于 2013-10-16,回答者为 Pavel Šimerda ,时间为 2013-10-17):
我认为像 rsync 这样的工具通常无法通过伪终端传输数据,我也不指望它能正常工作。rsync 进行的传输具有二进制性质,任何使用特殊字符的层自然都会破坏这一点。
我很好奇使用双“-t”的原因,因为它的含义是强制分配 TTY,即使它显然没有意义(例如,本地端是一个想要传输数据的守护进程,而不是终端会话)。
除了故意破坏 SSH 传输上的任何二进制协议(例如出于测试目的)之外,还有其他理由使用“-tt”吗?
requiretty
我唯一的建议是只为一个用户禁用,请参阅sudoers:如何禁用每个用户的 requiretty。