我需要将文件从机器 C 下载到机器 A。为此,我需要登录机器 B(我正在使用 执行此操作scp
),因为我无法直接从 A 访问 C。
是否可以使用单个命令或脚本将文件从 C 下载到 A?
答案1
如果可以从机器B访问A和C,
新版本scp
支持-3
开关,允许您在两台远程计算机之间复制文件。
-3 Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts. Note that this option disables the
progress meter.
$ scp -3 user1@C:/file user2@A:/file
答案2
如果您在所有机器上配置了 SSH 访问,则可以通过机器 B 设置 SSH 隧道。
第一步:
[user@A ~]$ ssh -f -L LOCALPORT:IP_ADDR_C:22 user_at_B@IP_ADDR_B
在命令执行之前将键-f
置于后台。ssh
使用-N
钥匙的好主意。
从man ssh
:
-N 不执行远程命令。这对于仅转发端口很有用(仅限协议版本 2)。
现在您可以使用scp
:
[user@A ~]$ scp -P LOCALPORT user_at_C@localhost:<your_file_at_C> <local_file>
例如,我们将从位于 machine 后面的计算机上的test.txt
用户主目录下载文件:me
192.168.1.1
host.example.com
ssh -f -N -L 2222:192.168.1.1:22 [email protected]
scp -P 2222 me@localhost:~/test.txt .
答案3
有一个非常简单的方法可以做到这一点!
首先连接网关:
ssh user@B
启动副本 C -> A
ssh user@C "dd if=/path/source/file" | ssh user@A "dd of=/path/destination/file"
如果您想删除dd
stderr 上写入的消息,请使用该选项(status=none
如果您的版本dd
支持此选项),或者使用2> /dev/null
.
请注意,8.4 版本中存在一个错误,即使文档中存在该错误,也会dd
导致该错误无法工作。status=none
答案4
您可以建立ssh
从 B 到 C 的隧道,然后从 Ascp
到 B 的端口,隧道用于下载文件。有很多信息页面,谷歌搜索,第一个搜索带了我这里。