设置 rsync --password-file 选项不起作用

设置 rsync --password-file 选项不起作用

我用来rsync重复将文件夹从源发送到目标。使用直接bash命令时,它会提示输入密码。为了防止提示输入密码,我制作了一个简单的cpp程序,调用bash的脚本通过执行和rsync来重复将文件夹发送到目的地。我试过这个forkexec回答,但它返回一个错误:

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 = truefalse能够将文件推送到服务器
  • 添加uid/gid以在传输文件时使用此用户名/组

然后重新启动服务器:

sudo systemctl restart rsync

1.rsync以用户身份在目的主机上进行测试public_rsync

  1. 使用 列出所有可列出的模块rsync localhost::,它应该返回模块名称和描述:

    [email protected]:~$ rsync localhost::
    checkpoints      RSYNC FILES
    
  2. 创建目录checkpoints并在该目录下创建测试文件:

    [email protected]:~$ mkdir ~/checkpoints
    [email protected]:~$ echo helloworld > ~/checkpoints/helloworld.txt
    
  3. 列出我们模块的所有文件:

    [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从源主机进行测试,确保拉/推功能正常

  1. 测试拉力:

    $ rsync 192.xxx.xxx.xxx::checkpoints/helloworld.txt /tmp/
    $ cat /tmp/helloworld.txt
    helloworld
    
  2. 测试推送:

    $ rsync /tmp/helloworld.txt 192.xxx.xxx.xxx::checkpoints/helloworld_push.txt
    
  3. 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工作正常,在目标主机上启用身份验证:

  1. /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
    
  2. 取消注释auth userssecrets 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

相关内容