分享一篇很棒的SSH手册中文翻译
https://www.cnblogs.com/f-ck-need-u/archive/2017/07/05/7120669.html
-N 选项表示登录到远程主机后不执行命令,只做流量转发。
我有两台Linux服务器,我会演示如何创建SSH隧道在不同的场景中解决问题。
第一台服务器 47.107.86.165我将它称为 A。另一台是 120.79.52.36 我叫它 B. 我在两台服务器的7000端口上均运行了一个简陋的web页面。


一、正向隧道 (参数 -L)
我想访问 B:7000, 但不希望直接访问,而是通过A来中转,我可以在 A 上执行这个命令:
ssh -N -L 0.0.0.0:7070:120.79.52.36:7000 gg@120.79.52.36

这意味着访问 A:7070 实际上是间接访问 B:7000

二、反向隧道 (参数 -R)
还是在A服务器上操作,我现在想让 B 监听一个端口,使得 B 访问该端口的时候跳转到另一个 [地址:端口],我可以在 A 上执行这个命令:
ssh -N -R 120.79.52.36:7800:0.0.0.0:7000 gg@120.79.52.36

上面这个命令的意思是在 120.79.52.36 上监听 7800,访问该端口会跳转到 A 的7000端口。
用 netstat 查看 B 是不是监听了 7800 端口

在 B 上访问本地 7800 端口,可以看到的确跳转到了 A 的 7000 端口。

这个功能有什么有趣的用途呢?我说一个我自己的例子。我所在的学校组了一个巨大的局域网,宿舍插上网线后获得了一个内网ip,不拨号是不能上网的。我发现实验楼的机器可以主动连接到我宿舍的ip,反过来我宿舍却不能连实验楼。那么我可以用ssh隧道+socks5来代理上网了。具体做法在第四个场景介绍,下面先介绍如何用SSH建立socks5代理。
三、socks5代理 (参数 -D)
我希望把 A 变成 socks5 服务器,通过 A 访问网站,可以在 A 上执行这个命令:
ssh -N -D 0.0.0.0:9000 root@0.0.0.0

这样 A 就监听了 9000 端口,A 成为了 socks5 服务器,在浏览器中设置代理后就通过 A 访问网页了。


这条命令还可以稍作修改,仍然用 A 作socks5 服务器,但是流量用另一台机器转发。
ssh -N -D 0.0.0.0:9000 gg@120.79.52.36
浏览器代理不用修改,仍然是 A:9000 ,打开 ip.cn 看看效果

四、反向隧道 + socks5 代理 (参数 -D -R)
最后一个场景,结合 -D 和 -R 参数,让 A 成为 socks5 服务器,然后建立反向隧道到 B 使得 B 在本地监听端口, B 通过该端口提供的 socks5 服务联网。
在 A 上执行两条命令:
ssh -N -D 0.0.0.0:9000 root@0.0.0.0
ssh -N -R 120.79.52.36:9090:0.0.0.0:9000 gg@120.79.52.36
此时 B 的 9090 端口已经成为了一个 “socks5代理“。
在 B 上安装 proxychains,设置代理后访问 ifconfig.me
配置 proxychains(这一步也可以用之前在浏览器内设置代理的方式替换)


可以看到 B 通过 A 的代理访问了外部网站。
SSH隧道:详解与应用示例
这篇博客详细介绍了SSH隧道的使用,包括正向隧道、反向隧道、socks5代理及其组合应用。通过实例展示了如何利用SSH隧道在不同场景下实现安全的网络连接,如解决局域网限制、实现远程访问等。
4671

被折叠的 条评论
为什么被折叠?



