Linux下,非root用户使用rsync命令同步失败的问题?

问题概述:

  1. 我使用GitHub Action部署我的博客,使用的root用户 + 私钥,能成功部署;action底层所使用的是rsync
  2. 考虑到安全问题,我禁用了root用户,新建了其他用户用来部署博客,但是发现GitHub Action运行了很久都没结果,一直无响应,发现是rsync运行了很久最后失败,测试了下在服务器上直接使用rsync也是一样的结果。

下面说下我的测试结果

  1. 目标服务器:阿里云(IP:120.XX.XX.XX), 源服务器:百度云,均使用Centos7,
  2. rsync:version 3.1.2 protocol version 31
  3. 用户PeterJXL已在/etc/sudoers里增加了权限,并且能以PeterJXL用户登录和切换为root:

    root    ALL=(ALL)     ALL
    PeterJXL ALL=(ALL) NOPASSWD:ALL

首先是在百度云上,测试root用户能否正常正常同步文件:(IP已脱敏)

$rsync -av -e "ssh -p 23456" test/ root@120.XX.XX.XX:/home/PeterJXL
root@120.XX.XX.XX's password: 
sending incremental file list
peterjxl.md
sent 328 bytes  received 95 bytes  20.63 bytes/sec
total size is 20  speedup is 0.05

然后在阿里云服务器,能看到该文件。rsync运行正常;


然后是使用其他用户:

$rsync -av -e "ssh -p 23456" test/ PeterJXL@120.27.217.147:/home/PeterJXL
PeterJXL@120.XX.XX.XX's password: 

然后,就没有然后了。。。。输入完密码后回车,一直卡着,没有结果,10几分钟后只能ctrl + c 结束该任务。

我确定密码是输对了的,不然密码错了会报错:

rsync -av --progress -e "ssh -p 23456" test/ PeterJXL@120.XX.XX.XX:/home/PeterJXL
PeterJXL@120.XX.XX.XX's password: 
Permission denied, please try again.

即使用密钥登录的方式,也是一直运行没有出结果

$rsync -av --progress -e "ssh -p 23456 -i id_rsa" test/ PeterJXL@120....:/home/PeterJXL

即使加了--progress参数,使用非root用户也没有进度条显示,但是用root用户的话有显示进度:

$rsync -av --progress -e "ssh -p 23456" test/ root@120.....:/home/PeterJXL
root@120......'s password: 
sending incremental file list
./
peterjxl.md
              5 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=3/5)
readme.md
              5 100%    4.88kB/s    0:00:00 (xfr#2, to-chk=2/5)
readme.t
              5 100%    4.88kB/s    0:00:00 (xfr#3, to-chk=1/5)
readme.txt
              5 100%    4.88kB/s    0:00:00 (xfr#4, to-chk=0/5)

sent 328 bytes  received 95 bytes  76.91 bytes/sec
total size is 20  speedup is 0.05

我的GitHub Action里跑了2小时多,最后报错:
image.png

我的流水线文件:https://github.com/Peter-JXL/vuepressblog/blob/master/.github/workflows/main.yml


提问:

  1. 难道rsync只能用root用户? 应该不至于这么离谱吧
  2. 如果非root用户也能使用rsync,那么运行过程这么久,肯定是哪里出了问题;怎么排查呢?在网上搜了下,好像没有说哪里能分析日志?有个说法是在/var/log/rsync.log里,但是我全局搜都没有搜到有日志:find / -name rsync.log
  3. 是否有什么步骤我漏做了?
  4. 已百度过 rsync 非root用户等关键字,没有搜到类似的文章;

参考:

  1. rsync 用法教程 - 阮一峰的网络日志
  2. 在Linux中rsync命令的实例-CSDN博客
  3. 我使用的GitHub Action:ssh-deploy: GitHub Action for deploying code via rsync over ssh. (with NodeJS)
  4. rsync通过非root账号传输文件到指定目录 - 粽先生 - 博客园
阅读 3.2k
1 个回答
✓ 已被采纳

在命令上加一个--debug=all看下详细的输出信息。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题