SSH Tunnel
SSH Tunnel 顾名思义就是 SSH 安全隧道,平时看别人的相关帖子的时候很多时候可能看不太明白讲的是几个意思,这里我们约定一下说法的含义:
- “ HostA 可以访问 HostB ” 意思是在机器 HostA 上,可以通过 SSH Client 远程登陆到机器 HostB 上。
- 下边 Sequence 图中,箭头方向就是机器间可以访问的方向。
- 下边 Sequence 图中,命令在箭头 起点端的机器 执行。
用流程图表示为:
SSH 的 -L, -R, -D 三种用法
ssh -L 用法1(本地起端口映射到其他机器)
意思是在 HostB 上,让 localhost 起 8888 端口,使之映射到 HostC 的 22 端口(默认)。如此,在 HostA 上可以使用 HostB:8888 就像使用 HostC:22 一样。
关键命令:
HostB$ ssh -L 8888 UserC@HostC
ssh -L 用法2(本地起端口映射到其他机器)
意思是在 HostA 上,让 localhost 起 8888 端口,使之映射到 HostC 的 22 端口。如此,在 HostA 上可以使用 localhost:8888 就像使用 HostC:22 一样。
关键命令:
HostA$ ssh -L 8888:HostC:22 UserB@HostB
ssh -R 用法1(非本地起端口映射到其他机器)
意思是在 HostC 上,让 HostB 起 8888 端口,使之映射到 localhost 的 22 端口。如此,在 HostA 上可以使用 HostB:8888 就像使用 HostC:22 一样。
HostC$ ssh -R 8888:localhost:22 UserB@HostB
ssh -R 用法2(非本地起端口映射到其他机器)
意思是在 HostC 上,让 HostB 起 8888 端口,使之映射到 HostD 的 22 端口。如此,在 HostA 上可以使用 HostB:8888 就像使用 HostD:22 一样。
HostC$ ssh -R 8888:HostD:22 UserB@HostB
ssh -D 用法(本地或非本地起 Socket Proxy)
- 本地的代理服务,通过 localhost:22 隧道入口建立
HostA$ ssh -D 8080
此时 localhost:8080 就是本地的 Socket 代理服务器。效果,即浏览器配置了 本机IP:8080 Socket5 的代理后,就可以像在本机上一样访问网站资源了。
- 本地的代理服务,通过 HostB:22 隧道入口建立
HostA$ ssh -D 8080 UserB:HostB
或写全
HostA$ ssh -D localhost:8080 -p 22 UserB:HostB
此时 localhost:8080 就是HostB上的 Socket 代理服务器。效果,即浏览器配置了 本机IP:8080 Socket5 的代理后,就可以像在HostB上一样访问网站资源了。