我有三台 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 配置后,您可以无缝复制文件,就像直接连接到远程服务器一样。