我可以通过 ssh 连接到两个主机,比如 host1 和 host2,并且我需要通过 将文件从 host1 复制到 host2 rsync
。
我知道我可以实现这一点,首先将文件从 host1 复制到 localhost,然后从 localhost 复制到 host2 或者通过执行简单的复制scp -3 <user1@host1:/file_path1> <user2@host2:/file_path2>
,但我的目标是通过测试 ssh 隧道rsync
。
有人能帮助我吗?
额外的:
我读过有关 ssh 隧道的文章,但无法实现我的目标……可能有些东西我没理解。例如,如果我运行
$ ssh -L 9999:host2:22 user_host1@host1
这意味着:将我的本地端口 9999 映射到 host2 的端口 22,并以用户 user_host1 的身份连接到 host1,但是……通过这种映射,连接到 host1 的目的是什么?
答案1
首先,感谢mmv-ru:您的回答是一个很好的起点,可以帮助我找到问题所在。
我已经写了一个答案来逐步解释该怎么做:
1 远程环回
在一次控制台运行中ssh -R 127.0.0.1:9999:host2:22 user_host1@host1 -N
2 远程办公
在其他控制台中转到服务器 host1ssh user_host1@host1
然后运行
rsync -e "ssh -p 9999" /file_path1 [email protected]:/file_path2
就我而言,此命令失败,因为我需要:
1 –[127.0.0.1]:9999
单击“是”添加到我的已知主机
2 - 因为我通过单个密钥 ssh 到 host2,所以我需要将该密钥添加到 host1 并将其权限设置为 400。
所以我的命令是
rsync -e "ssh -p 9999 -i my_ssh_key_for_host2" /file_path1 [email protected]:/file_path2
并且有效!!!
3 一体式
后第2步(在远程主机 1 上为主机 2 创建密钥)我可以用一个命令执行所有操作:
ssh -R 127.0.0.1:9999:host2:22 user_host1@host1 'rsync -e "ssh -p 9999 -i my_ssh_key_for_host2" /file_path1 [email protected]:/file_path2'
注意第二部分中的单引号!
问候,
模拟
答案2
- 假设您无法将 ssh 直接从 host1 连接到 host2。(否则最简单的方法是将 host1 直接连接到 host2)
- 假设无法从 host1 或 host2 连接到您的 PC。
下一个命令 make rsync
ssh -R 127.0.0.1:9999:host2:22 user_host1@host1 rsync -e "ssh -p 9999" /file_path1 [email protected]:/file_path2
让我们解析一下:
- ssh 连接到 host1
-R 127.0.0.1:9999:host2:22
在端口 9999 上监听远程(主机 1)的环回,并通过客户端主机将连接转发到主机 2:22- 在 host1 上运行 rsync
-e "ssh -p 9999"
强制使用非默认 ssh 端口进行连接- rsync 本地路径
/file_path1
到远程路径[email protected]:/file_path2
我们连接到 user2@host2,但作为地址我们使用先前映射的环回端口
我希望命令没有输入错误。
更新型多巴胺
为了进行故障排除,首先尝试使用隧道连接交互式 ssh
$ ssh -R 127.0.0.1:9999:host2:22 user_host1@host1
并通过 tunel 手动 ssh 连接
[user_host1@host1 ]$ ssh -p 9999 [email protected]
可以在 host1 上的 sshd 配置中禁用隧道。