如何借助中间服务器将文件从一台服务器复制到另一台服务器?

如何借助中间服务器将文件从一台服务器复制到另一台服务器?

我有三台 Linux 服务器:
1. 数据库服务器 10.10.10.10
2. 应用程序服务器 10.10.10.52
3. 备份服务器 10.10.10.55

数据库和应用程序服务器之间有直接连接,应用程序和备份服务器之间有直接连接,但数据库和备份服务器之间没有连接。
我在数据库服务器中有一个文件,我想将其复制到备份服务器,但我不知道该怎么做。
如果有人有任何想法,请与我分享。
提前致谢。

答案1

您必须建立从主机 1(1) 到主机(3) 的隧道,使用 SSH 登录主机 2(2),因为只有 (1) 可以访问 (2),如下所示:

host1$ ssh -L 9999:host3:22 user@host2

这将创建到主机 3、本地主机中的 SSH 端口 (22)、端口 9999/TCP 的隧道

然后在另一个窗口中,您从主机 1 与主机 3 中存在的用户进行 scp,如下所示:

host1$ scp -P 9999 file_to_copy user@localhost:/user/file_to_copy

在这方面,文件的传输是直接从主机 1 到主机 3 完成的,而主机 2 只是通过 SSH 隧道转发连接。当您从第一个 ssh 注销时,隧道将关闭。

答案2

假设:在主机 A 上 scp /tmp/xxx HostB:/tmp/xxx 和在 HostB 上 scp /tmp/xxx HostC:/tmp/xxx

在某些情况下,传统上您会使用 ssh/scp 隧道从 HostA 复制到 HostC。假设您的网络也禁用了隧道(还假设您还询问了“直接连接”)

您可以编写类似这样的脚本 - 从 HostB 执行

#!/usr/bin/bash -e
# assumes you have PKI setup so you only have to enter your pass-phrase at most once
file=$1

scp Hosta:$file $file
scp $file HostC:$file
rm $file

思考后:来自HostB

scp HostA:$file HostC:$file

答案3

的替代方案Rui F Ribeiro 提出的解决方案ProxyCommand是在 SSH 配置文件中设置(通常~/.ssh/config):

host <remote>
    ProxyCommand ssh <gateway_user>@<gateway> nc <host> 22
    User <host_user>

然后,您可以简单地使用:

scp /local/path/to/file <remote>:/remote/path/to/file
scp <remote>:/remote/path/to/file /local/path/to/file

设置 SSH 配置后,您可以无缝复制文件,就像直接连接到远程服务器一样。

相关内容