![创建 ssh 隧道来传输文件?](https://linux22.com/image/1338141/%E5%88%9B%E5%BB%BA%20ssh%20%E9%9A%A7%E9%81%93%E6%9D%A5%E4%BC%A0%E8%BE%93%E6%96%87%E4%BB%B6%EF%BC%9F.png)
对我来说,网络是一个非常“不透明”的东西,即使阅读了很多关于 SSH 的教程,我仍然不明白如何创建一个基本的隧道来传输我的文件。
配置如下:
My Computer --[Internet]--> Bridge Machine --[Local Network]--> Final Machine
目前我做以下事情:
1) Connect to the Bridge Machine with :
ssh -X [email protected]
2) Connect to the Final Machine with :
ssh -X username@finalmachine
3) I copy the address of files I need (for example .../mydirectory)
4) Then I deconnect from the finalmachine with :
exit
5) I copy the files to the bridge :
scp -r username@finalmachine:/.../mydirectory .
6) I deconnect from the bridge with :
exit
7) I copy the files to my machine :
scp -r [email protected]:/.../mydirectory .
这相当复杂。我的问题很简单:如何使用 SSH 隧道简化这一过程?
(请向我解释您所写的每个命令行的含义,以便我了解每行实际的作用,并避免将其当作神奇的东西来使用。此外,如果使用了一些端口号,请向我解释我是否可以选择一个完全随机的数字,或者我是否必须选择一个特定的数字。)
答案1
设置 ssh 配置文件:
~/.ssh/config
此文件将以多种方式提供帮助,但最终将允许您通过一个步骤完成所有操作。
首先,为每台机器设置别名
Host bridge
User username
Host final
User username
现在您可以使用“ssh -X bridge”连接第一台机器。
对于下一步,您需要在每台机器上使用 netcat(尝试“which nc”)进行检查。然后,使用带有“最终”机器配置的 ProxyCommand,如下所示:
Host final
User username
ProxyCommand ssh -CAYq bridge exec nc %h %p
此命令将您想要的任何内容通过中央机器发送到端口 %p 上的主机 %h(这意味着如果您想通过不同的端口发送其他应用程序数据,您可以 - 只要此连接处于打开状态)
如果您已设置密钥,则也不会出现密码提示,如果没有:系统将首先提示您输入桥接密码,然后提示您输入最终密码。
现在“ssh final”应该可以工作了,并且:
scp -r final:/.../directory .