最近在使用Goland进行远程调试时,因为配置要使用到rsync将源代码文件同步到服务器,避免每次进行全量复制,但是在配置过程中遇到错误,提示:rsync: connection unexpectedly closed (0 bytes received so far) [sender] 。经过一番调试,最后终于得以解决,以下记录问题的解决过程。

1.配置目标服务器的rsync遇到错误

rsync错误截图

错误提示:

1
2
3
4
5
6
7
8
9
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=
3.1.2]
rsync: safe_read failed to read 4 bytes [Receiver]: Connection reset by peer (10
4)
rsync error: error in rsync protocol data stream (code 12) at io.c(276) [Receive
r=3.1.2]

Process finished with exit code 12

2.问题分析

我们知道,这同步到linux服务器,一般与我们同步命令有关,通常与ssh有关,而rsync有关参数-e,-e参数的说明为

1
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步

指定ssh端口:

1
 -e 'ssh -p 10022'

经查阅相关资料,说可能是ssh版本有冲突,最好使用与rsync同级目录下的ssh

3.进一步分析

使用where ssh查看电脑里是不是存在多个ssh

where ssh结果截图

果然,存在多个。

4.解决办法

在Goland的setting->Tools->Rsync

配置指定rsync使用的ssh的具体文件位置,如下图所示

Goland中配置指定rsync使用的ssh的具体文件位置截图

另外,关于密钥的位置问题,经过调试发现,其实跟使用哪个ssh有关,如果我们使用rsync同级目录下的ssh,那么密钥就在cygwin的home目录之下对应的ssh文件夹下,如:cygwin64\home\用户名.ssh,

在cygwin命令行下用chown命令确保密钥文件拥有者是当前用户即可。