我用来rsync
重复将文件夹从源发送到目标。使用直接bash
命令时,它会提示输入密码。为了防止提示输入密码,我制作了一个简单的cpp
程序,调用bash
的脚本通过执行和rsync
来重复将文件夹发送到目的地。我试过这个fork
exec
回答,但它返回一个错误:
sudo rsync $args --password-file=rsync_pass -avz /home/user/folder/checkpoints/$1 [email protected]::checkpoints/$1
rsync: failed to connect to 192.xxx.xxx.xxx (192.xxx.xxx.xxx): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(127) [sender=3.1.3]
笔记:我只想使用该--password-file
选项
我已通过运行以下命令检查rsync
守护程序是否在目标端运行:sudo systemctl status rsync
。这是我的rsyncd.conf
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
port = 12000
[files]
path = /home/public_rsync
comment = RSYNC FILES
read only = true
timeout = 300
我该如何让它发挥作用?
答案1
连接被拒绝,因为您使用的是非标准 rsync 端口,请参阅用户 roaima 的评论。
为简单起见,我希望目标主机上存在public_rsync
具有主目录的用户/home/public_rsync
(192.xxx.xxx.xxx,守护程序正在运行的位置),并且该服务不会被防火墙阻止。
从该示例开始/etc/rsyncd.conf
(稍后启用密码):
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsync.log
[checkpoints]
path = /home/public_rsync/checkpoints
comment = RSYNC FILES
read only = false
uid = public_rsync
gid = public_rsync
#auth users = secondaryvm
#secrets file = /etc/rsyncd.secrets
timeout = 300
解释:
- 删除
port = 12000
以使用默认端口 873 - 将模块名称从 更改
[files]
为[checkpoints]
- 将模块目录的路径更改为
/home/public_rsync/checkpoints
- 更改
read only = true
为false
能够将文件推送到服务器 - 添加
uid
/gid
以在传输文件时使用此用户名/组
然后重新启动服务器:
sudo systemctl restart rsync
1.rsync
以用户身份在目的主机上进行测试public_rsync
使用 列出所有可列出的模块
rsync localhost::
,它应该返回模块名称和描述:[email protected]:~$ rsync localhost:: checkpoints RSYNC FILES
创建目录
checkpoints
并在该目录下创建测试文件:[email protected]:~$ mkdir ~/checkpoints [email protected]:~$ echo helloworld > ~/checkpoints/helloworld.txt
列出我们模块的所有文件:
[email protected]:~$ rsync localhost::checkpoints drwxrwxr-x 4,096 2020/10/30 18:26:01 . -rw-rw-r-- 11 2020/10/30 18:26:01 helloworld.txt
2.rsync
从源主机进行测试,确保拉/推功能正常
测试拉力:
$ rsync 192.xxx.xxx.xxx::checkpoints/helloworld.txt /tmp/ $ cat /tmp/helloworld.txt helloworld
测试推送:
$ rsync /tmp/helloworld.txt 192.xxx.xxx.xxx::checkpoints/helloworld_push.txt
checkpoints
再次列出模块文件:$ rsync 192.xxx.xxx.xxx::checkpoints drwxrwxr-x 4,096 2020/10/30 18:29:06 . -rw-rw-r-- 11 2020/10/30 18:26:01 helloworld.txt -rw-r--r-- 11 2020/10/30 18:29:06 helloworld_push.txt
3. 启用身份验证
现在我们知道rsync
工作正常,在目标主机上启用身份验证:
/etc/rsyncd.secrets
创建包含用户名和密码的文本文件secondaryvm
(用户名是任意的,不需要用户帐户):[email protected]:~$ sudo tee /etc/rsyncd.secrets > /dev/null <<'EOF' secondaryvm:12345 EOF [email protected]:~$ sudo chmod 600 /etc/rsyncd.secrets
取消注释
auth users
并secrets file
在 中/etc/rsyncd.conf
重新启动服务器:[email protected]:~$ sudo systemctl restart rsync
4. 测试身份验证(来自源主机)
不应该再有没有凭据的连接,您应该输入密码:
$ rsync 192.xxx.xxx.xxx::checkpoints
Password:
@ERROR: auth failed on module checkpoints
rsync error: error starting client-server protocol (code 5) at main.c(1675) [Receiver=3.1.3]
提供连接的用户名和密码,例如
$ echo '12345' > rsync_pass
$ chmod 600 rsync_pass
$ rsync --password-file=rsync_pass [email protected]::checkpoints
如果有什么不起作用,请使用选项添加详细信息-v
并检查守护程序日志/var/log/rsync.log
。