Localhost 作为两台服务器之间的 ssh 桥

Localhost 作为两台服务器之间的 ssh 桥

我可以通过 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 配置中禁用隧道。

相关内容