通过 ssh 隧道进行 rsync [关闭]

Posted

技术标签:

【中文标题】通过 ssh 隧道进行 rsync [关闭]【英文标题】:rsync through ssh tunnel [closed] 【发布时间】:2013-05-15 07:40:38 【问题描述】:

我想同步到一个集群节点,我通常通过另一个系统连接到该节点:

假设我先连接到

  ssh user@bridge 

从那里到

  ssh user@clusternode

现在我想从我的工作站同步到 clusternode。我执行以下操作:

我打开一个 ssh 隧道

ssh -L8000:clusternode:8000 user@bridge

我从我的工作站同步到集群节点

rsync -e "ssh -p8000" source user@localhost:destination

它不起作用,我明白了

 ssh_exchange_identification: Connection closed by remote host

为什么它不起作用?我该怎么办?


我在这里找到了很多资料:

http://toddharris.net/blog/2005/10/23/rsyncing-through-an-ssh-tunnel/

我想明白我的问题是网桥和目的地之间的第二次身份验证,所以我改为方法2,也不是很优雅,但它有效。我想尝试方法3,但我不知道如何配置rsync daemon

【问题讨论】:

尝试使用 ssh 命令的 -v(或 -vvv)选项:rsync -e "ssh -vvv -p8000" source user@localhost:destination 启用详细 ssh 日志记录,错误几乎总是在那里。 您可以设置一个用于集群节点的代理(参见例如rsync.samba.org/firewall.html,尤其是方法 2),然后在不明确指定代理的情况下使用 rsync。 比以下答案中给出的更好的解决方案:puppet.com/blog/speed-up-ssh-by-reusing-connections 为什么这个问题跑题了? @rashid "我们不允许在 Stack Overflow 上提出有关专业服务器或网络相关基础设施管理的问题。您可以编辑问题,使其成为 Stack Overflow 的主题或在服务器上发布新问题错误。” 【参考方案1】:

试试这个单行:

rsync -av -e "ssh -A root@proxy ssh" ./src root@target:/dst

【讨论】:

那一个班轮是完美的,因为我不想打开一个持久的隧道。谢谢! 单行解决方案会很好,但它对我不起作用。我收到“主机密钥验证失败。rsync:连接意外关闭(到目前为止收到 0 个字节)[sender] rsync 错误:在 /SourceCache/rsync/rsync-42/rsync/io.c(452) 出现无法解释的错误(代码 255) [sender=2.6.9]" 我想这是因为它只问我网桥的密码,从不问我目标的密码(他们都有密码) 但是如果我们不能设置 SSH 密钥怎么办?是否可以单行并为两台服务器提供密码? 我发现使用rsync -av -e "ssh -A user@proxy ssh -o StrictHostKeyChecking=no" 并没有因为Host key verification failed 而失败。这仅在主机密钥以前从未见过的情况下才有效,以防它已更改添加 -o UserKnownHostsFile=/dev/null(不推荐,除非您知道更改原因)。 @abalter 在没有 -A 的情况下尝试对我没有帮助【参考方案2】:

这对我有用。

我在后台运行一个命令来隧道到远程主机:

 ssh -N -L 2222:remote.example.com:22 bridge.example.com&

然后我像这样 rsync 到本地主机:

rsync -auve "ssh -p 2222" . me@localhost:/some/path

【讨论】:

您必须在第一个命令中删除最后一个字符 & 才能输入密码。【参考方案3】:

你应该连接到clusternode的22端口,所以隧道应该是这样的

ssh -L localhost:8000:clusternode:22 user@bridge

【讨论】:

以上是关于通过 ssh 隧道进行 rsync [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过 ssh 隧道的 ftp [关闭]

如何在MacOS上创建ssh隧道? [关闭]

rsync命令详解rsync用ssh隧道方式同步

rsync服务安装使用

rsync 基于ssh隧道 拉去文件

通过 ssh 隧道使用套接字进行双向通信