Windows 下使用 cwRsync 同步报错的解决方法

一入巨硬深似海,从此BUG是梦魇

前因

众所周知,我在前几天不是写了篇 使用 rsync 来部署 Hexo 博客 的文章嘛
当时写文章的时候用的系统是 macOS,这几天换成了 Windows 玩游戏
本来玩的好好的,今天我心血来潮,想要用 Windows 来部署博客。说干就干,什么环境都装好之后,部署博客时却提示

泻药,人刚吃了速效救心丸

属实能给人心脏整出点什么问题(

解决历程

经过在海量无用的信息中进行筛选,算是找到了问题的来源
就!是!S!S!H!
是的,就是这玩意,我把头塞马桶里也想不出这种奇葩的问题来源
原因是 cwRsync 和系统的 SSH 并不兼容,于是乎就产生了这种问题(并不是大多数文章中写的那样,是什么 cwRsync 需要付费什么的 balabala……)

解决方法

有好几种解决方法,按照自己的需要来选择。不是用来部署 Hexo 博客的也可以看看,在下面有相应的方法

hexo-deployer-rsync(推荐,风险最低)

这种方法的优势在于修改的部分不会影响到系统稳定性,但缺点是如果插件更新,就需要重新修改(虽然这插件万年不一定更新一次

打开插件目录

1
博客源码目录/node_modules/hexo-deployer-rsync/lib

修改 deployer.js
将其中第 41 行的 ssh 修改为 cwRsync 目录下的 ssh.exe

例如,我用的是 scoop 安装的 cwRsync,那么就应该修改为

1
C:/Users/Leao9203/scoop/apps/cwrsync/current/bin/ssh.exe

注意抄作业别把用户名也抄了(笑)。另外就是目录的 \ 要改成 /

替换系统的SSH(不推荐,风险较大)

这种方法的优势在于修改一劳永逸,以后无论插件怎么更新都可以用,而且使用 cwRsync 时不用手动指定 SSH,缺点是修改的部分有可能影响系统的稳定性

打开这个目录

1
C:\Windows\System32\OpenSSH

将其中的 ssh.exe 删掉或者修改为其他名字(如果你已经删掉了,而且需要下载一次源文件,请前往附件下载)
然后将 cwRsync 目录下的 ssh.exe 复制或移动过来即可

如果是仅使用 cwRsync 来同步的

可以跟上一个步骤中一样替换系统的 SSH,也可以在同步时加入一段(同样需要修改为 cwRsync 的文件夹)

1
-e "C:\Users\Leao9203\scoop\apps\cwrsync\current\bin\ssh.exe"

例如原来是这样

改了之后是这样

后记

hexo-deployer-rsync 默认传输时加了 -a,也就是说会传输文件的权限,这就导致 Windows 传输到 Linux 时会有权限异常,文件会被设置为 700
Nginx 由于博客部署的文件权限被设置为 700,无法读取,导致访客在访问网站的时会出现 403 Forbidden 错误。
解决方法就是在博客的 _config.ymldeploy 部分加上一段

1
args: --chmod=755

附件

ssh.exe(Windows 自带的)