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


11

我正在尝试设置rsync,以便每天从服务器复制数据。为了使系统尽可能受限制,我尝试使用手册页中描述的模式:“通过远程外壳连接使用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中


接收服务器上的/ var / log / secure或/ var / log / messages中记录了什么?
戴夫·切尼

那是:rsync:无法打开配置文件“ /etc/rsyncd.conf”:没有这样的文件或目录(2)谢谢,这导致了一个解决方案,我将其作为答案发布。
rjmunro

Answers:


11

文档中似乎存在错误或rsync的含义。man rsync说:

Rsync支持使用远程外壳连接到主机,然后生成一个一次性使用的“守护程序”服务器,该服务器希望在远程用户的目录中读取其配置文件。

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

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

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

到/root/.ssh/authorized_keys。

我不只是将配置放在默认位置的原因是,我不想有人意外启动正常的rsync守护程序-我只希望守护程序在拥有正确的ssh密钥时具有如此多的访问权限。


5

如果您想将其锁定得尽可能小,我不建议在守护程序模式下使用rsync。您想限制允许运行SSH密钥的命令,并使用该密钥调用copy命令。

要找出限制密钥使用的命令,请在ssh命令中稍作修改后运行相应的rsync命令行:

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=

3
我希望能够对系统的各个部分执行不同的只读备份-例如每天备份电子邮件和SQL数据库,但每周进行其他事情。对于每个可能的备份,我将需要一个特定的命令和一个特定的密钥,并且我将无法使用相同的基础结构进行额外的临时备份。
rjmunro

2
足够公平-我从字面上理解“为了使系统尽可能受限制” :)
MikeyB

1
您可以在脚本中放置多个命令,并将参数作为第一行输入传递给脚本。
alecco 2013年

1
有没有一种方法可以生成命令串行而无需通过调试信息?'-vlogDtprze.iLs'
qodeninja
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.