SSH Tunnel 一般场景用法

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

猜你喜欢

转载自blog.csdn.net/Xw_Classmate/article/details/52490209