SCP 在复制文件时会建立新的连接,如果涉及防火墙,这有时会使操作变得困难。
例如,
主机-A <--> 主机-B <--> 主机-C <--> 主机-D
- Host-A 通过 SSH 连接到 Host-B,然后 Host-B 通过 SSH 连接到 Host-C,再连接到 Host-D。
- Host-A不能连接除了Host-B之外的其他计算机,Host-B只能连接Host-A和Host-C,Host-C只能连接Host-B和Host-D,最后Host-D只能连接Host-C。
命令(在 Host-D 上)scp /home/user/file 主机 A:/home/user/newfile将尝试在两者之间创建新的 SSH 隧道,但这并不是我想要的。我希望现有的 SSH 隧道链将文件通过之前的主机复制回去,直到到达 Host-A。
我怎样才能做到这一点?
答案1
您可以重新使用现有连接。使用命令行开关-M
或(客户端)配置选项ControlMaster
。请参阅这个答案有关详细信息,请访问 StackOverflow。
我广泛使用过此功能,并结合使用以ControlPersist
仅在延迟后关闭连接。这可以避免您原本需要的连接时间,并且在您多次关闭和重新连接时(正如我在交互使用过程中经常做的那样)可以大大提高性能。
请注意,它不能很好地连接某些主机(例如 GitHub),因此如果您将其设置为默认选项,则可能需要明确排除某些主机使用此选项。