【问题标题】:rsync gives protocol version mismatch on clean shell WSL->Debianrsync 在干净的 shell WSL->Debian 上给出协议版本不匹配
【发布时间】:2020-02-11 20:37:59
【问题描述】:

我在一个 WSL bash shell 中,试图通过 ssh 同步到远程 cloudcast 机器 (Debian)。但是,我不断收到协议不匹配错误。

一些研究表明,造成这种情况的最常见原因是外壳不干净,即:登录时会打印某些内容的外壳。 在远程机器中,我将 .hushlogin 添加到用户主页,我还将 PS1="" 添加到 .bashrc 以摆脱提示(根据某处的某些帖子)。

测试干净的外壳表明它确实很干净。以下登录没有任何消息甚至提示:

ssh -tt -i ~/id_rsa -F /dev/null -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/mnt/c/Users/anonyuser/AppData/Roaming/GGP/ssh/known_hosts cloudcast@123.123.12.12 -p 44722 --

以下显示 log.out 是用 0 个字节创建的:

ssh -tt -i ~/id_rsa -F /dev/null -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/mnt/c/Users/anonyuser/AppData/Roaming/GGP/ssh/known_hosts cloudcast@123.123.12.12 -p 44722 -- false > log.out

还有这个:

rsync -a -v -e "ssh -tt -i ~/id_rsa -F /dev/null -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/mnt/c/Users/anonyuser/AppData/Roaming/GGP/ssh/known_hosts cloudcast@136.112.98.92 -p 44722 --" lol.txt cloudcast@123.123.12.12:/home/cloudcast/

给出协议不匹配的版本。

使用 -vvvv 运行显示:

(Client) Protocol versions: remote=1752392034, negotiated=31

我已经尝试在 ssh 命令中添加 -q 和/或 -2,根据某处的其他帖子,但没有区别。

我检查了 rsync 版本,它们在远程和本地机器上是一样的:

rsync  version 3.1.2  protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, prealloc

本地 ssh 版本为: OpenSSH_7.6p1 Ubuntu-4ubuntu0.3,OpenSSL 1.0.2n 2017 年 12 月 7 日

远程 ssh 版本为: OpenSSH_7.4p1 Debian-10+deb9u3,OpenSSL 1.0.2l 2017 年 5 月 25 日

有什么想法吗?

【问题讨论】:

  • 帖子中的 IP 错误,rsync 命令应为:rsync -a -v -e "ssh -tt -i ~/id_rsa -F /dev/null -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/mnt/c/Users/anonyuser/AppData/Roaming/GGP/ssh/known_hosts cloudcast@123.123.12.12 -p 44722 --" lol.txt cloudcast@123.123.12.12:/home/cloudcast/ 我也尝试过不使用 ssh 目标:rsync -a -v -e "ssh -tt -i ~/id_rsa -F /dev/null -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/mnt/c/Users/anonyuser/AppData/Roaming/GGP/ssh/known_hosts -p 44722 --" lol.txt cloudcast@123.123.12.12:/home/cloudcast/
  • 我认为正在发生的事情是 rsync 正在 添加 "cloudcast@123.123.12.12" 到 ssh 命令,因为 arg 列表中已经有一个地址它错误地执行远程命令;因此,它得到的不是一个干净的 shell,而是一个“找不到命令”错误。

标签: ssh protocols rsync mismatch


【解决方案1】:

好吧,根据我上面的评论,我尝试了以下方法: rsync -a -vvvv -e "ssh -tt -i ~/id_rsa -F /dev/null -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/mnt/c/Users/anonyuser/AppData/Roaming/GGP/ssh/known_hosts -p 44722" lol.txt cloudcast@123.123.12.12:/home/cloudcast/

请注意,ssh 命令中没有 IP,也没有 --。 这让我通过了协议版本不匹配。 rsync 还是不行,但至少更进了一步!

编辑:最终答案是:

rsync -a -vvvv -e "ssh -i ~/id_rsa -F /dev/null -oStrictHostKeyChecking=yes -oUserKnownHostsFile=/mnt/c/Users/anonyuser/AppData/Roaming/GGP/ssh/known_hosts -p 44722" lol.txt cloudcast@123.123.12.12:/home/cloudcast/

注意 ssh 命令没有 -tt。这是一个垃圾箱转移,d-uh!

【讨论】:

    【解决方案2】:

    我在 Fasthosts 上的一个站点遇到了这个问题,我已将其移至较新的架构,以允许我向域添加 SSL 证书。事实证明,答案可以在 SSH 欢迎屏幕中找到,只需指定一个不同的端口即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 2021-01-18
      • 2018-04-11
      • 1970-01-01
      • 2022-10-13
      • 2016-04-13
      • 1970-01-01
      相关资源
      最近更新 更多