0基础linux运维教程 常见问题

本文介绍了在学习和使用rsync时可能遇到的错误,如协议版本不兼容、模块不存在、认证失败等问题,并详细分析了错误原因,提供了解决方案,涉及登录shell与非登录shell的区别,以及如何避免rsync传输失败。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多的同学在学习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”,

让我们再来看一下 .bash_profile 的内容:

cat ~/.bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

  . ~/.bashrc  # .bashrc 默认又会加载 /etc/bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

看到这儿,我想你大概明白了为什么 .bashrc 里有输出流会导致 rsync 传输失败了。

# 3、解决方案

既然都找到原因了,那怎么解决呢?

最简单的方案当然是直接删掉.bashrc文件输出的内容

但有同学会问,我本来就是要让用户登录的时候有登录提示的呀?现在为了 rsync 岂不是得禁掉?

那这里就又引入了另一个知识点:交互式shell和飞交互式shell、登录shell和非登录shell 的区别

什么是交互式的呢?就像我们平时通过命令行做事一样,你敲一个命令,终端解析执行完之后给你一个结果,这样一种交互式的形式。那么,平时我们接触的Shell基本上都是交互式的,如gnome-terminal打开一个Shell以及通过Ctrl+alt+1等切换过去的文本终端。交互式Shell下, "echo $-"返回的字符串中包含i,否则不包含。也可以通过在bash后面加-i参数打开一个交互式的Shell,具体可以看man bash。bash后面加-c参数执行命令打开的是非交互式Shell,可以用以下命令验证:

bash -c 'echo $-'  # 返回hBc

解释完交互式之后,继续解析本小节后半部分中的登录二字。登录Shell其实很好理解,就是我们平时通过用户名/密码才能登录的Shell,最典型的就是用Ctrl+alt+1切换过去的文本终端。如何区分登录Shell和非登录Shell呢,可以通过查看$0的值,登录Shell返回-bash,而非登录Shell返回的是bash。平时gnome-terminal打开的Shell就是非登录Shell。也可以通过在bash后面加--login参数打开一个登录Shell。

回到本小节开头的问题,咱们可以用如下方式去区分一个命令是处于登录shell还是非登录shell:

[[ $- == *i* ]] && echo 'This is interactive shell.'

其中,$-中包含i意思是指当前的Shell是一个交互式(interactive)的Shell。

针对文中开头的问题,咱们加上如上的判断,就可以做到登录的时候有提示,同时 rsync 也不会报错了,可谓一举两得。

好了,今天的内容就到这儿了,其实 shell 作为一门古老的编程语言以及随着 linux 版本的多样化发展、不断的演变,”坑“很多,却也值得让人细细探索~

```

其他常见错误

```bash

1.报错:

[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backu

@ERROR: Unknown module 'backu'

rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]

#原因:模块名字写错了

2.报错:

[root@web01 ~]# rsync -avz 1.txt rsync_backu@172.16.1.41::backup

@ERROR: auth failed on module backup

rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]

#原因:

    1)虚拟用户写错了

    2)虚拟用户密码写错了

    3)密码文件权限不对,一定是600

3.报错:

[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup

rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113)

rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]

#原因:开启了防火墙

4.报错:

[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::/backup

ERROR: The remote path must start with a module name not a /

rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]

#原因:::后面跟的时模块名

5.报错:

[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup/

sending incremental file list

rsync: delete of stat xattr failed for "1.txt" (in backup): Permission denied (13)

sent 47 bytes  received 107 bytes  308.00 bytes/sec

total size is 0  speedup is 0.00

rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]

#原因:

    1)服务端真实目录权限不足

    2)selinux没有关闭

6.报错:

[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup/

rsync: failed to connect to 172.16.1.41 (172.16.1.41): Connection refused (111)

rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]

#原因:服务端服务没有启动

7.报错:

[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup/

@ERROR: chdir failed

rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]

#原因:服务端没有模块指定的目录

```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值