很多的同学在学习rsync的时候都会遇到这样那样的问题,下面山河老师整理了一些问题,看以下的常见问题可以让你避免不必要的麻烦。
问题
```
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(178) [sender=3.1.2]
```
分析与解决方案
```
# 1、原因是
rsync 在传输数据之前,会先与远端进行一次 ssh 登录认证,而当 .bashrc文件有输出的时候,rsync 客户端解析返回的数据包会出现混乱,于是乎就会出现文中开头提到的报错:客户端和远端的协议版本不兼容/不匹配了。
# 2、需要说明的是:
远端 sshd 进程是通过“bash –c”的方式来执行命令(即"非交互式的非登录shell" )
但在执行命令之前,ssh的那一次登录本身是“非交互式的登录shell”, 非交互式的登录shell (bash –l xxx.sh) 载入的信息列表及顺序如下:
/etc/profile
~/.bash_profile ( -> ~/.bashrc -> /etc/bashrc)
~/.bash_login
~/.profile
$BASH_ENV
所以 ssh 的时候会载入“ ~/.bash_profile”,
让我们再来看一下