【问题标题】:Why is this rsync connection unexpectedly closed on Windows? [closed]为什么这个 rsync 连接在 Windows 上意外关闭? [关闭]
【发布时间】:2011-11-07 19:54:16
【问题描述】:

我正在尝试在 Windows 7 上使用 rsync。我安装了 cwRsync 并尝试连接到 Ubuntu 9.04。

$ rsync -azC --force --more-options ./ user@server:/my/path/
rsync: connection unexpectedly closed (0 bytes received so far) [receiver] 
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [receiver=3.0.5]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(610) [sender=3.0.8]

【问题讨论】:

  • 这个错误似乎包罗万象。如果您指定文件的目标文件名,而不仅仅是目录,也会发生这种情况。
  • 这可能会迟到,但会为后代添加。文件同步到的文件系统已达到 100% 的磁盘空间。

标签: windows rsync


【解决方案1】:

对我来说,诀窍是我遇到了ssh 冲突。

我在我的 Windows 路径上安装了 Git,其中包括 ssh。 cwrsync 也会安装 ssh。

诀窍是制作一个批处理文件来设置正确的路径:

rsync.bat

@echo off
SETLOCAL
SET CWRSYNCHOME=c:\commands\cwrsync
SET HOME=c:\Users\Petah\
SET CWOLDPATH=%PATH%
SET PATH=%CWRSYNCHOME%\bin;%PATH%
%~dp0\cwrsync\bin\rsync.exe %*

在 Windows 上,您可以键入 where ssh 来检查这是否是问题。你会得到这样的东西:

where ssh
C:\Program Files (x86)\Git\bin\ssh.exe
C:\Program Files\cwRsync\ssh.exe

【讨论】:

  • github 的 git 客户端的 shell ssh 版本也有问题。做一个apt-cyg install openssh 为我解决了这个问题。如果不确定您是否有此问题,请在 cygwin 提示符下尝试 which ssh
  • where ssh 来自您的 Windows CLI
  • 嗨,对不起,我好像遇到了同样的问题,但是我对计算机环境的了解并不能帮助我解决这个问题:stackoverflow.com/questions/32756423/… 谢谢
  • +1。我正在使用cygwin并遇到同样的问题。我找到了一种更简单的方法来解决这个路径问题,只需执行 SET PATH=C:\cygwin\bin;%PATH%pre在所有路径之前挂起 cygwin(或 cwrsync)的路径(自动包括 git 的路径)。
  • cwrsync 现在带有一个cwrsync.cmd 文件,它可以设置它.. 你可以在文件末尾添加rsync 命令,它们会起作用,或者在使用之前可能会call 它rsync 在 cmd 提示符下
【解决方案2】:

我在更改 rsync 版本时看到了这一点。在旧版本中,它可以说:

rsync -e 'ssh ...

rsync.exessh.exe 在同一个目录中时。

对于较新的版本,我必须指定路径:

rsync -e './ssh ...

它成功了。

【讨论】:

  • +1 除了更好的示例路径是 rsync -e /usr/bin/ssh ....
  • @maverick 是的,我相信rsync -e /usr/bin/ssh.exe 会更好。 -_-
【解决方案3】:

我遇到了这个问题,但只有当我尝试从 Linux (RH) 服务器 rsync 到 Solaris 服务器时。我的解决方法是确保 rsync 在两个盒子上具有相同的路径,并且 rsync 的所有权是相同的。

在 linux 机器上,rsync 路径是 /usr/bin,在 Solaris 机器上是 /usr/local/bin。所以,在 Solaris 机器上,我执行了 ln -s /usr/local/bin/rsync /usr/bin/rsync。

我仍然遇到同样的问题,并注意到所有权差异。在 linux 上是 root:root,在 solaris 上是 bin:bin。将 solaris 更改为 root:root 修复了它。

【讨论】:

  • 如果远程 rsync 二进制文件位于不寻常的位置,您可以指定它:例如 rsync -azC --rsync-path=/usr/local/bin/rsync ...。
【解决方案4】:

我在 2 个 Linux 机器之间出现了这个错误。通过在远程盒子和本地盒子上安装 RSYNC 轻松解决。

【讨论】:

  • 是的,如果 rsync 可以更详细地描述错误,那就太好了。我收到了这个问题的所有其他“答案”产生的完全相同的错误消息,但我的是另一个基本问题...... linux 机器上目标目录的文件权限和所有权。直到确认我没有此答案中提到的任何其他问题(rsync 路径、bin 版本不匹配、bin 权限、ssh 路径等)后才发现。
【解决方案5】:

此错误消息可能意味着您输入错误的服务器名称或忘记在 server 上启动 ssh 服务器。确保 ssh 服务器在端口 22 上的服务器上运行,并且没有防火墙。您可以使用ssh user@server 进行测试。

【讨论】:

  • nop 服务器工作正常,名称正确,scp 命令和 ssh 命令也工作正常
  • @rkmax 用其他可能的原因更新了答案,但如果 ssh 有效,这些也不适用。您可以尝试不带任何不必要参数的 rsync,然后上传数据包转储,例如使用 wireshark 生成的数据包吗?
  • 是的,服务器在 22 端口上侦听并仅使用 from_dir 和 user@host:to_dir 运行命令并得到相同的消息
  • @rkmax 你能发布一个数据包转储的链接吗?
  • @rkmax 安装wireshark(上面链接),开始抓包,执行rsync,停止抓包,将文件保存在某个地方,然后上传并链接到它。这将指出我怀疑的任何网络问题。或者(或另外),您可以安装 strace 并运行 strace -o rsync.strace -s 100 -f rsync user@server 并上传由此生成的文件 rsync.strace。这将使您了解 rsync 正在做什么以及它可能失败的原因。
【解决方案6】:

我得到了解决方案。我使用的是 cygwin,这是 Windows 的 rsync 命令只能在 windows shell 中工作并且在 windows powershell 中工作的问题。

有几次它在两个 linux 机器之间发生了同样的错误。并且似乎是不兼容的 rsync 版本

【讨论】:

  • 如果目标服务器上的 rsync 不存在,也会发生这种情况。
  • 我在 cygwin 和 rsync 上遇到了同样的问题。在我的例子中,我已经为 Windows 安装了 Git,它首先在 PATH 中放置了自己的 openssh 实现(/cygdrive/c/Windows/System32/OpenSSH/ssh)。通过添加 rsync 选项 --rsh /cygdrive/c/cygwin64/bin/ssh我可以使用不会给出错误消息的 cygwin openssh 实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
相关资源
最近更新 更多