【发布时间】: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