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

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

前因

众所周知,我在前几天不是写了篇 使用 rsync 来部署 Hexo 博客 的文章嘛
当时写文章的时候用的系统是 macOS,这几天换成了 Windows 玩游戏
本来玩的好好的,今天我心血来潮,想要用 Windows 来部署博客。说干就干,什么环境都装好之后,部署博客时却提示
<del>泻药,人刚吃了速效救心丸</del>
属实能给人心脏整出点什么问题(

解决历程

经过在海量无用的信息中进行筛选,算是找到了问题的来源
就!是!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\6.2.4\bin\ssh.exe"

例如原来是这样

改了之后是这样

后记

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

1
args: --chmod=755

附件

ssh.exe(Windows 自带的)