问题概述:
- 我使用GitHub Action部署我的博客,使用的root用户 + 私钥,能成功部署;action底层所使用的是rsync
- 考虑到安全问题,我禁用了root用户,新建了其他用户用来部署博客,但是发现GitHub Action运行了很久都没结果,一直无响应,发现是rsync运行了很久最后失败,测试了下在服务器上直接使用rsync也是一样的结果。
下面说下我的测试结果
- 目标服务器:阿里云(IP:120.XX.XX.XX), 源服务器:百度云,均使用Centos7,
- rsync:version 3.1.2 protocol version 31
用户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小时多,最后报错:
我的流水线文件:https://github.com/Peter-JXL/vuepressblog/blob/master/.github/workflows/main.yml
提问:
- 难道rsync只能用root用户? 应该不至于这么离谱吧
- 如果非root用户也能使用rsync,那么运行过程这么久,肯定是哪里出了问题;怎么排查呢?在网上搜了下,好像没有说哪里能分析日志?有个说法是在/var/log/rsync.log里,但是我全局搜都没有搜到有日志:find / -name rsync.log
- 是否有什么步骤我漏做了?
- 已百度过 rsync 非root用户等关键字,没有搜到类似的文章;
参考:
在命令上加一个
--debug=all
看下详细的输出信息。