SSH Tunnel 一般场景用法

4 篇文章 0 订阅

SSH Tunnel

SSH Tunnel 顾名思义就是 SSH 安全隧道,平时看别人的相关帖子的时候很多时候可能看不太明白讲的是几个意思,这里我们约定一下说法的含义:

  1. “ HostA 可以访问 HostB ” 意思是在机器 HostA 上,可以通过 SSH Client 远程登陆到机器 HostB 上。
  2. 下边 Sequence 图中,箭头方向就是机器间可以访问的方向。
  3. 下边 Sequence 图中,命令在箭头 起点端的机器 执行。

用流程图表示为:

HostAHostAHostBHostBssh HostBUser1@HostB此时已登陆了HostB的terminal

SSH 的 -L, -R, -D 三种用法

ssh -L 用法1(本地起端口映射到其他机器)

HostAHostAHostBHostBHostCHostC[执行1] ssh -L 8888 UserC@HostC[效果] ssh -p 8888 UserC@HostB

意思是在 HostB 上,让 localhost 起 8888 端口,使之映射到 HostC 的 22 端口(默认)。如此,在 HostA 上可以使用 HostB:8888 就像使用 HostC:22 一样。

关键命令:

<code class="language-bash hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">HostB$ ssh -L <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8888</span> UserC@HostC</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

ssh -L 用法2(本地起端口映射到其他机器)

HostAHostAHostBHostBHostCHostC[执行1] ssh -L 8888:HostC:22 UserB@HostB[效果] ssh -p 8888 UserC@localhost

意思是在 HostA 上,让 localhost 起 8888 端口,使之映射到 HostC 的 22 端口。如此,在 HostA 上可以使用 localhost:8888 就像使用 HostC:22 一样。

关键命令:

<code class="language-bash hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">HostA$ ssh -L <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8888</span>:HostC:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span> UserB@HostB</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

ssh -R 用法1(非本地起端口映射到其他机器)

HostAHostAHostBHostBHostCHostC[执行1] ssh -R 8888:localhost:22 UserB@HostB[效果] ssh -p 8888 UserC@HostB

意思是在 HostC 上,让 HostB 起 8888 端口,使之映射到 localhost 的 22 端口。如此,在 HostA 上可以使用 HostB:8888 就像使用 HostC:22 一样。

<code class="language-bash hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">HostC$ ssh -R <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8888</span>:localhost:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span> UserB@HostB</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

ssh -R 用法2(非本地起端口映射到其他机器)

HostAHostAHostBHostBHostCHostCHostDHostD[执行1] ssh -R 8888:HostD:22 UserB@HostB[效果] ssh -p 8888 UserD@HostB

意思是在 HostC 上,让 HostB 起 8888 端口,使之映射到 HostD 的 22 端口。如此,在 HostA 上可以使用 HostB:8888 就像使用 HostD:22 一样。

<code class="language-bash hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">HostC$ ssh -R <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8888</span>:HostD:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span> UserB@HostB</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

ssh -D 用法(本地或非本地起 Socket Proxy)

  1. 本地的代理服务,通过 localhost:22 隧道入口建立
<code class="language-bash hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">HostA$ ssh -D <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8080</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

此时 localhost:8080 就是本地的 Socket 代理服务器。效果,即浏览器配置了 本机IP:8080 Socket5 的代理后,就可以像在本机上一样访问网站资源了。

  1. 本地的代理服务,通过 HostB:22 隧道入口建立
<code class="language-bash hljs  has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">HostA$ ssh -D <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8080</span> UserB:HostB
或写全
HostA$ ssh -D localhost:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8080</span> -p <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">22</span> UserB:HostB</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

此时 localhost:8080 就是HostB上的 Socket 代理服务器。效果,即浏览器配置了 本机IP:8080 Socket5 的代理后,就可以像在HostB上一样访问网站资源了。

原文连接:http://blog.csdn.net/wxqee/article/details/49234595

 

想学人工智能(Python、数据分析、机器学习、深度学习、推荐系统、强化学习),来公众号AI派看看吧!!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值