ssh – 使用rsync的BackupPC失败,“协议版本不匹配 – 你的shell是否干净?”

我刚刚在Debian框中安装了BackupPC,将其用作备份服务器.如
你知道,这个软件可以使用rsync等.使用时
rsync选项,它失败了.

>服务器:Debian Jessie. BackupPC 3.3.1从源代码构建,由执行
用户“backup-user”. Rsync 3.1.2使用默认值从源代码构建
选项.
>客户:Debian Jessie. Rsync 3.1.2使用默认值从源代码构建
选项.

失败后,可以在BackupPC的日志中找到使用的rsync命令.
shell中尝试命令,以BackupPC用户身份登录,我遇到了这个问题
“协议版本不匹配 – 你的shell干净了吗?”错误.命令是:

/usr/bin/ssh -q -x -l backup-user 192.168.10.20 /usr/local/bin/rsync
--server --sender --numeric-ids --perms --owner --group -D --links
--hard-links --times --block-size=2048 --recursive --ignore-times .
/home/backup-user/test

在发送给客户端的rsync命令中添加一些详细信息,它说(注意远程协议版本):

FILE_STRUCT_LEN=24,EXTRA_LEN=4

(Server) Protocol versions: remote=168430090,negotiated=31
protocol version mismatch -- is your shell clean? 
(see the rsync man page for an explanation) 
[sender] _exit_cleanup(code=2,file=compat.c,line=178): entered rsync error: protocol incompatibility (code 2) at compat.c(178) [sender=3.1.2] 
[sender] _exit_cleanup(code=2,line=178): about to call exit(2)

看起来远程协议中的168430090是十进制的
代表0xA0A0​​A0A,但不知道是什么写的.我在列表中搜索了类似的错误,但我找到的所有错误都归功于我已经检查过的内容.

在客户端中,使用我在rsync站点中找到的调试脚本:

/usr/bin/ssh -q -x -l backup-user 192.168.206.103
/home/backup-user/rsync-debug --server --sender --numeric-ids --perms
--owner --group -D --links --hard-links --times --block-size=2048
--recursive --ignore-times . /home/backup-user/test

rsync-2991.out内容:

2997  00:58:30 brk(0)                   = 0xefb000
2997  00:58:30 access("/etc/ld.so.nohwcap",F_OK) = -1 ENOENT (No such file
or directory)
2997  00:58:30 mmap(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,-1,0) = 0x7fefc7341000
2997  00:58:30 access("/etc/ld.so.preload",R_OK) = -1 ENOENT (No such file
or directory)
2997  00:58:30 open("/etc/ld.so.cache",O_RDONLY|O_CLOEXEC) = 3
2997  00:58:30 fstat(3,{st_mode=S_IFREG|0644,st_size=33837,...}) = 0
2997  00:58:30 mmap(NULL,33837,PROT_READ,MAP_PRIVATE,3,0) =
0x7fefc7338000
2997  00:58:30 close(3)                 = 0
2997  00:58:30 access("/etc/ld.so.nohwcap",F_OK) = -1 ENOENT (No such file
or directory)
2997  00:58:30 open("/lib/x86_64-linux-gnu/libc.so.6",O_RDONLY|O_CLOEXEC)
= 3
2997  00:58:30 read(3,"\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\34\2\0\0\0\0\0@
\0\0\0\0\0\0\0\300T\32\0\0\0\0\0\0\0\0\0@\0008\0\n\0@
\0D\0C\0\6\0\0\0\5\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0@\0\0\0\0\0\0\0000\2\0\0\0\0\0\0000\2\0\0\0\0\0\0\10\0\0\0\0\0\0\0\3\0\0\0\4\0\0\0000\303\26\0\0\0\0\0000\303\26\0\0\0\0\0000\303\26\0\0\0\0\0\34\0\0\0\0\0\0\0\34\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0\1\0\0\0\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\364\352\31\0\0\0\0\0\364\352\31\0\0\0\0\0\0\0
\0\0\0\0\0\1\0\0\0\6\0\0\0@\367\31\0\0\0\0\0@\3679\0\0\0\0\0@\3679\0\0\0\0\0\370O\0\0\0\0\0\0\340\222\0\0\0\0\0\0\0\0
\0\0\0\0\0\2\0\0\0\6\0\0\0\240 \32\0\0\0\0\0\240 :\0\0\0\0\0\240
:\0\0\0\0\0\340\1\0\0\0\0\0\0\340\1\0\0\0\0\0\0\10\0\0\0\0\0\0\0\4\0\0\0\4\0\0\0p\2\0\0\0\0\0\0p\2\0\0\0\0\0\0p\2\0\0\0\0\0\0D\0\0\0\0\0\0\0D\0\0\0\0\0\0\0\4\0\0\0\0\0\0\0\7\0\0\0\4\0\0\0@
\367\31\0\0\0\0\0@\3679\0\0\0\0\0@
\3679\0\0\0\0\0\20\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\10\0\0\0\0\0\0\0P\345td\4\0\0\0L\303\26\0\0\0\0\0L\303\26\0\0\0\0\0L\303\26\0\0\0\0\0$j\0\0\0\0\0\0$j\0\0\0\0\0\0\4\0\0\0\0\0\0\0Q\345td\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\0\0\0\0\0\0R\345td\4\0\0\0@
\367\31\0\0\0\0\0@\3679\0\0\0\0\0@
\3679\0\0\0\0\0\3008\0\0\0\0\0\0\3008\0\0\0\0\0\0\1\0\0\0\0\0\0\0\4\0\0\0\24\0\0\0\3\0\0\0GNU\0\371?y\343\344|\332K|C=\2\323!\316@\34J\205\1\4\0\0\0\20\0\0\0\1\0\0\0GNU\0\0\0\0\0\2\0\0\0\6\0\0\0
\0\0\0\0\0\0\0\363\3\0\0\n\0\0\0\0\1\0\0\16\0\0\0\0000\20D\240
\2\1\210\3\346\220\305E\214\0\300\0\10\0\5\200\0`\300\200\0\r\212\f\0\4\20\0\210D2\10.@\210P4,\16\"H&\204\300\214\4\10\0\2\2\16\241\254\32\4f\300\0\3002\0\300\0P\1
\201\10\204\v  ($\0\4 P\0\20X\200\312DB(\0\6\200\20\30B\0
@\200\0\tP\0Q\212@\20\0\0\0\0\10\0\0\21\20",832) = 832
2997  00:58:30 fstat(3,{st_mode=S_IFREG|0755,st_size=1729984,3836448,PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_DENYWRITE,0) = 0x7fefc6d7a000
2997  00:58:30 mprotect(0x7fefc6f19000,2097152,PROT_NONE) = 0
2997  00:58:30 mmap(0x7fefc7119000,24576,MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE,0x19f000) = 0x7fefc7119000
2997  00:58:30 mmap(0x7fefc711f000,14880,MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,0) = 0x7fefc711f000
2997  00:58:30 close(3)                 = 0
2997  00:58:30 mmap(NULL,4096,0) = 0x7fefc7337000
2997  00:58:30 mmap(NULL,0) = 0x7fefc7336000
2997  00:58:30 mmap(NULL,0) = 0x7fefc7335000
2997  00:58:30 arch_prctl(ARCH_SET_FS,0x7fefc7336700) = 0
2997  00:58:30 mprotect(0x7fefc7119000,16384,PROT_READ) = 0
2997  00:58:30 mprotect(0x7fefc7343000,PROT_READ) = 0
2997  00:58:30 munmap(0x7fefc7338000,33837) = 0
2997  00:58:30 rt_sigaction(SIGUSR1,{0x41c690,[],SA_RESTORER|SA_NOCLDSTOP,0x7fefc6daf180},NULL,8) = 0
2997  00:58:30 rt_sigaction(SIGUSR2,{0x41d220,8) = 0
2997  00:58:30 rt_sigaction(SIGCHLD,{0x41c630,8) = 0
2997  00:58:30 geteuid()                = 1001
2997  00:58:30 getegid()                = 1001
2997  00:58:30 umask(0)                 = 022
2997  00:58:30 umask(022)               = 0
2997  00:58:30 brk(0)                   = 0xefb000
2997  00:58:30 brk(0xf1c000)            = 0xf1c000
2997  00:58:30 open("/usr/lib/locale/locale-archive",O_RDONLY|O_CLOEXEC) =
3
2997  00:58:30 fstat(3,st_size=1607632,1607632,0) =
0x7fefc71ac000
2997  00:58:30 close(3)                 = 0
2997  00:58:30 open("/etc/popt",O_RDONLY) = -1 ENOENT (No such file or
directory)
2997  00:58:30 open("/home/backup-user/.popt",O_RDONLY) = -1 ENOENT (No
such file or directory)
2997  00:58:30 rt_sigaction(SIGINT,{0x40cca0,8) = 0
2997  00:58:30 rt_sigaction(SIGHUP,8) = 0
2997  00:58:30 rt_sigaction(SIGTERM,8) = 0
2997  00:58:30 rt_sigprocmask(SIG_UNBLOCK,[HUP INT USR1 USR2 TERM CHLD],8) = 0
2997  00:58:30 rt_sigaction(SIGPIPE,{SIG_IGN,8) = 0
2997  00:58:30 rt_sigaction(SIGXFSZ,8) = 0
2997  00:58:30 getcwd("/home/backup-user",4095) = 13
2997  00:58:30 fcntl(0,F_GETFL)        = 0 (flags O_RDONLY)
2997  00:58:30 fcntl(0,F_SETFL,O_RDONLY|O_NONBLOCK) = 0
2997  00:58:30 fcntl(1,F_GETFL)        = 0x1 (flags O_WRONLY)
2997  00:58:30 fcntl(1,O_WRONLY|O_NONBLOCK) = 0
2997  00:58:30 fcntl(0,F_GETFL)        = 0x800 (flags O_RDONLY|O_NONBLOCK)
2997  00:58:30 fcntl(1,F_GETFL)        = 0x801 (flags O_WRONLY|O_NONBLOCK)
2997  00:58:30 write(1,"\37\0\0\0",4) = 4

这是脚本停止的地方.我必须在服务器中多次返回.然后它继续:

2997  00:58:30 select(1,[0],{60,0}) = 1 (in [0],left {55,558348})
2997  00:58:34 read(0,"\n",4)         = 1
2997  00:58:34 select(1,left {59,793510})
2997  00:58:35 read(0,3)         = 1
2997  00:58:35 select(1,975726})
2997  00:58:35 read(0,2)         = 1
2997  00:58:35 select(1,968630})
2997  00:58:35 read(0,1)         = 1
2997  00:58:35 write(2,"protocol version mismatch -- is your shell
clean?",49) = 49
2997  00:58:35 write(2,1)        = 1
2997  00:58:35 write(2,"(see the rsync man page for an explanation)",43)
= 43
2997  00:58:35 write(2,1)        = 1
2997  00:58:35 rt_sigaction(SIGUSR1,SA_RESTORER,8) = 0
2997  00:58:35 rt_sigaction(SIGUSR2,8) = 0
2997  00:58:35 write(2,"rsync error: protocol incompatibility (code 2) at
compat.c(178) [sender=3.1.2]",78) = 78
2997  00:58:35 write(2,1)        = 1
2997  00:58:35 nanosleep({0,100000000},NULL) = 0
2997  00:58:35 exit_group(2)            = ?
2997  00:58:35     exited with 2

经过几个小时的研究,我无法弄清楚出了什么问题.我删除了
并检查了所有可以写任何文本的内容(ssh welcome message,
.bashrc echos,passphrase甚至系统提示)和rsync仍然是
无法收集文件. ssh连接是无密码的.

我也做了真正的> testfile测试,没有问题:

backup-user@backup:~$/usr/bin/ssh -q -x -l backup-user 192.168.10.20 true
> testfile
backup-user@backup:~$ll testfile
-rw-r--r-- 1 backup-user backup-user 0 feb 16 02:26 testfile

线条:

2997  00:58:30 open("/etc/popt",O_RDONLY) = -1 ENOENT (No
such file or directory)

看起来很可疑,但也检查了涉及的库.

选项–server和–sender由BackupPC添加,但不应该
正如rsync文档所述,需要在常规使用中使用.

有人发现了同样的问题吗?我知道通常这是由在终端上写入数据的东西引起的,但是使用调试脚本我可以看到rsync是写入数据的过程.

希望这些信息足够清晰.谢谢你的时间.

解决方法

BackupPC可能使用Perl File :: Rsync模块连接到客户端.我怀疑这个模块中存在错误或兼容性问题.

Debian有一个BackupPC包.它应该列出所有适当的依赖项.源包可以列出依赖项.

我通常更喜欢打包模块,因为它们更有可能定期打补丁.如果您确实想从源代码构建,请考虑下载构建包并使用您自己的源代码替换源代码.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。

按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下:

计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的进程数目,用uptime查看到负载很高,既有可能是CPU利用率高,也可能是大量在等待io的进程导致,用mpstat查看每个CPU的使用情况,查看CPU的使用率或者CPU花在等待io的时间,接着用pidstat定位具体的进程
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线程切换及中断切换,进程切换的开销较大,除了需要保存寄存器和程序计数器中的值还需保存全局变量、栈等到内存中,以便下次运行恢复,而同一进程中的线程切换开销会小很多,只需更新寄存器和线程独有的栈,共享资源如打开的文件、全局变量等无需切换,当硬件中
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载。 默认视图: 当想看系统负载时,可观察汇总的%CPU中的us用户进程和sy系统进程是否占用CPU很高,相加接近100%就说明占用很高了,有些程序可能得不到及
文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具