Che*_*ron 14 ssh network-share tar
我们有以下情况:
我对 #2 和 #3 都没有 root 权限。我也不能在机器 #2 上真正存储信息(不超过 200 MiB)(因为它是进入网络其余部分的网关,不能更多)。在 #3 机器上,有一个文件夹,大小约为 3 GiB,我想将其复制到本地。我不能从#1 SSH 到#3,但我可以SSH 到#2,然后到#3。也无法在#2 和#3 之间设置公钥对,但在#1 和#2 之间安装了一个密钥对。
通常我使用 SSH 和 tar 的组合来完成这项工作:
ssh name@host "tar cf - folder" > folder.tar
Run Code Online (Sandbox Code Playgroud)
但是在这种情况下,这将需要某种嵌套,而我似乎无法完成此操作。
那么,将数据从#3 获取到#1 的好方法是什么?
Gen*_*ene 27
您可以通过 machine2 创建 SSH 隧道,然后在另一个会话中连接到该隧道。
例如,在 machine1 上打开两个 CLI 会话。在第一个会话中运行以下命令:
MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2
Run Code Online (Sandbox Code Playgroud)
在第二个会话中运行以下命令:
MACHINE1 $ ssh -p 2022 <user>@localhost
Run Code Online (Sandbox Code Playgroud)
第一个命令发生的事情是本地端口(machine1 上的 2022)正在使用与 machine2 的 SSH 连接隧道连接到 machine3 上的端口 22。
使用第二个命令,您将连接到新打开的本地端口 (2022),就像直接连接到 machine3 一样。
现在,如果您想使用典型的文件传输过程,您可以执行以下操作:
ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar
Run Code Online (Sandbox Code Playgroud)
或者,您可以熟悉 rsync 并执行以下操作:
rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/
Run Code Online (Sandbox Code Playgroud)
假设最终目标不是获得 tarball。
您还可以使用较新版本的 SSH 的主会话功能。它在这里描述:
https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing
可能您需要的只是编辑/创建您的 .ssh/config。添加控制主会话的定义:
ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30
Run Code Online (Sandbox Code Playgroud)
然后您可以指定您的第一个跃点服务器定义,例如:
Host first_hop
Hostname <your first host FQDN or IP>
User <your user>
Run Code Online (Sandbox Code Playgroud)
第二个跃点将使用您的第一个跃点服务器作为代理:
Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop
Run Code Online (Sandbox Code Playgroud)
不要忘记创建 ~/.ssh/cm_socket 目录并且配置权限应该是 644。
然后您应该能够直接通过 SSH 或 SCP 连接到/从您的第二台服务器。可以有更多的服务器像这样链接。
归档时间: |
|
查看次数: |
2098 次 |
最近记录: |