从服务器两步之外获取文件[关闭]


14

我们有以下情况:

  1. 我的机器
  2. 网关机器
  3. 目标机器

我对#2和#3都没有root权限。我也不能真正在第2台计算机上存储信息(不超过200 MiB)(因为要成为通往网络其余部分的网关,所以不要更多)。在3号机器上,有一个我要复制到本地的文件夹,大小约为3 GiB。我无法从#1到#3进行SSH,但可以将SSH到#2,然后再到#3。也无法在#2和#3之间设置公共专用密钥对,但是在#1和#2之间安装了密钥对。

通常,我使用SSH和tar的组合来完成此操作:

ssh name@host "tar cf - folder" > folder.tar

但是在这种情况下,这将需要某种嵌套,而我似乎无法做到这一点。

那么,从#3到#1获取数据的好方法是什么?

Answers:


27

您可以通过machine2创建SSH隧道,然后在另一个会话中连接到该隧道。

例如,在machine1上打开两个CLI会话。在第一个会话中,运行以下命令:

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

在第二个会话中,运行以下命令:

MACHINE1 $ ssh -p 2022 <user>@localhost

第一条命令所发生的情况是,使用与machine2的SSH连接将本地端口(machine1上的2022)通过隧道连接到machine3上的端口22。

使用第二个命令,您将连接到新打开的本地端口(2022),就像您直接连接到machine3一样。

现在,如果您要使用典型的文件传输过程,则可以执行以下操作:

ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar

另外,您可以使自己熟悉rsync并执行以下操作:

rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/

假设最终目标不是获得目标。


2
使用ProxyCommandssh -W两个ssh命令可以合并为一个命令行。如果您使用的是OpenSSH客户端的最新版本,则有一个参数可让您使用一个ssh命令完成所有操作。
kasperd

+1表示rsync;)
NieDzejkob

我使用tar是因为传输大量文件比传输一个大文件要花更多的时间。rsync解决了吗?
Cheiron

进行远程传输时,rsync会校验传输中的数据(在接收端,在将其写入磁盘之前),因此传输文件将花费更多时间。但是,这是花费的时间。
基因

5

您还可以使用较新版本的SSH的主会话功能。在这里描述:

https://zh.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

您可能所需要做的就是编辑/创建.ssh / config。在此处添加控制主会话的定义:

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

然后,您可以指定第一跳服务器定义,例如:

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

第二跳将使用您的第一跳服务器作为代理:

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

不要忘记创建〜/ .ssh / cm_socket目录,并且配置权限应为644。

然后,您应该能够直接与第二台服务器进行SSH或SCP交换。这样可以链接更多服务器。


3
通过阅读您的链接,我认为ControlMaster不需要多路传输/来进行代理。该Wikibook中
IMSoP

是的我同意。有多种方法。但是,我认为大师班最优雅。这只是个人喜好;-)
Jaroslav Kucera

我们中的一个人误解了一些东西。据我所知,“主连接”是关于有效利用网络资源,与这个问题无关。这并非是另一种方式,与手头的任务无关。
IMSoP
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.