通过 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 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章