我曾经遇到过通过 SSH 转发进行 SCP 的情况,
VM-A <---> VM-B <---> VM-C
并且需要将文件从 A 传输到 C 或反之亦然,即在这个场景中 B 是 Jumpbox。
就我而言,通过我的本地主机,我可以访问 2 个虚拟机,并且我想在它们之间共享文件。
VM-A <---> VM-B
VM-A <---> VM-C
并且需要在 B 和 C 之间进行文件传输。(A 是我的本地主机,我可以在上面运行 SSH 命令)
现在,实现此目的的一种方法是:
- 从 B SCP 到 A,然后再次从 A SCP 到 C。
但是,由于 SCP 命令仅将源和目标作为输入,我认为这样做就可以了:
scp user@VM-B user@VM-C
如果我在 A 上运行此命令,因为 A 具有必要的授权。然而,这会导致:
Host key verification failed.
lost connection
那么,如何克服这个问题并将数据直接从 B 移动到 C 呢?
答案1
直接将数据从 B 移动到 C?
这实际上是一个问题 – scp 试图让 VM-B 直接连接到 VM-C,绕过 VM-A。
您希望完成转移在-3
直接,使用scp 选项完成。
scp -3 user@VM-B user@VM-C
(在当前的 OpenSSH 版本中,这是默认设置,-R
启用旧的直接模式。)
答案2
您可以使用“桥接”连接而不是 NAT 来设置虚拟机的网络设置。这将使您的虚拟机与主机处于同一个本地网络上,并具有自己的本地 ipv4 地址,这样它们就可以通过这种方式直接 scp 到彼此。
如果您想这样做,请转到每个虚拟机的“设置”->“网络”->“附加到”
但是如果您想将您的虚拟机放在主机下隔离的嵌套网络上,那么这对您来说并不适用。