无法让 rsync 在 daemon-over-ssh 模式下工作

无法让 rsync 在 daemon-over-ssh 模式下工作

我正在尝试设置 rsync 以便每天从服务器复制数据。为了使系统尽可能受限,我尝试使用手册页中描述的模式:“通过远程 Shell 连接使用 RSYNC-DAEMON 功能”

因此我在根目录下放置了一个名为 rsyncd.conf 的文件:

[root]
path = /
read only = true

并尝试复制 /etc/passwd 进行测试:

rsync -vv -e ssh myserver::root/etc/passwd .

但我得到以下信息:

opening connection using: ssh myserver rsync --server --daemon . 
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(635) [receiver=3.0.3]

我这样做的原因是,一旦我让它工作起来,我计划通过指定命令来限制访问

rsync --server --daemon .

在 ~/.ssh/authorized_keys 中

答案1

文档或 rsync 的实现中似乎存在错误。rsync 命令说:

Rsync 支持使用远程 shell 连接到主机,然后生成一次性“守护进程”服务器,该服务器期望在远程用户的目录。

但是当连接到 root 时,根据 /var/log/messages,它正在 /etc/rsyncd.conf 中查找配置文件(当不通过 SSH 使用时,rsyncd.conf 文件的标准位置。

我必须通过添加来强制 ssh 服务器使用正确的配置文件

command="rsync --config=/root/rsyncd.conf --server --daemon ."

到 /root/.ssh/authorized_keys。

我没有将配置放在默认位置的原因是我不希望有人意外启动正常的 rsync 守护进程 - 我只希望守护进程在获得正确的 ssh 密钥时才拥有这么多的访问权限。

答案2

如果您想尽可能严格地锁定它,我不建议您使用守护进程模式的 rsync。您想限制允许 SSH 密钥运行的命令,并使用该密钥调用复制命令。

要找出将密钥限制到哪个命令,请运行适当的 rsync 命令行并对 ssh 命令进行少许修改:

rsync -avz -e 'ssh -v' stuff somewhere:/place

您将在调试输出中看到一行,例如:

debug1: Sending command: rsync --server -vlogDtprze.iLs . /place

该命令正是您想要限制密钥能够在 .ssh/authorized_keys 中运行的命令:

command="rsync --server -vlogDtprze.iLs . /place" ssh-dss AAAASSHKEY=

相关内容