我正在尝试使用以下配置进行站点到站点的传输。我有一台旧服务器 (server-A)、一台新服务器 (server-B) 和我的工作站 (wks),我想在其上启动传输。
wks 和服务器 A/B 之间已完成 SSH 密钥交换。
服务器A和服务器B没有交换密钥。
我从我的工作站尝试了以下命令
scp -r root@server-A:/path/to/source/ root@server-B:/destination/path
但它不起作用。据我所知,服务器 A 尝试连接服务器 B,但由于没有进行密钥交换,因此失败。
您知道如何让文件传输适用于这个特定的配置吗?
答案1
使用服务器 A 和服务器 B 之间的直接连接传输文件是首选方法。这就是scp
正在尝试做的事情。man 1 scp
:
-3
两个远程主机之间的副本通过本地主机传输。如果没有此选项,数据将直接在两个远程主机之间复制。请注意,此选项会禁用进度表。
您说得对,如果没有-3
“服务器 A 尝试连接到服务器 B”这个选项。我的测试表明,即使服务器 B 允许基于密码的身份验证,与 tty 交互(同时被要求输入密码)也很可能成为问题。在这种情况下此评论看起来有用:
ssh
进入服务器 A,在服务器 A 上启动scp
(一个命令)。避免复制文件两次。
明确ssh
进入服务器 A 后,scp
调用该服务器与 tty 交互时应该不会出现问题,同时询问服务器 B 的密码。或者,您可以ssh
进入服务器 B 并scp
在那里调用。
如果不可能(需要密钥,不允许输入密码),请scp -3
在您的工作站上使用。显然,这将使用您的本地计算机作为一种代理,因此数据将在其网络连接上上下流动。
但并非所有scp
实现都支持-3
。