简说 SSH 隧道-- Local 与 Remote 端口转发

Posted Flybeta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简说 SSH 隧道-- Local 与 Remote 端口转发相关的知识,希望对你有一定的参考价值。

一、用 LocalForward 访问远端不能直接访问的东西

1.1 远端被墙了

假定你所在的网络无法直连某个服务器,比如 goodle.com,但你有一台 vps 可以连接 goodle.com,你可以这样

ssh -L 8888:goodle.com:80 yourname@yourvps.com
-L 表示 Local 转发
这一句表示 forward my (local)localhost port 8888 to goodle.com at port 80

连接成功之后,打开你的浏览器,输入 http://localhost:8888 哇,Goodle 能够访问了!

1.2 远端没有被墙,但它只允许自己(localhost)访问自己

比如你那台数据库服务器,只允许 localhost 访问。可你….就是想远程访问嘛

ssh -L 3406:localhost:3306 yourname@yourdbserver.com
这一句表示 forward my (local)localhost port 3406 to (remote)localhost at port 80
许多人被两个端口之间夹着的 localhost 迷惑,我上面这句解释够清楚了,希望你不要犯糊涂。

连接成功之后,

mysql -u uname -p pass -P 3406 -hlocalhost
这一句里的 localhost 当然是 (local)localhost

你现在就可以愉快地玩耍了。

二、用 RemoteForward 让远端访问你本地的东西

假设你做了个好玩的网站,想展示给你网上的朋友看。然而你并没有公网IP,或者你虽然有公网IP,但是你没有路由器管理密码… 总之他没有法子直接连接你的机器。

然而你有一台vps,那就好办了

ssh -R 8888:localhost:80 yourname@yourvps.com
-R 表示Remote 转发
这一句表示 forward my (local)localhost port 80 to (remote)machine at port 8888

你现在访问

http://yourvps.com:8888

理论上就可以看到你本地机器上运行的新奇网站了。当然,这只是理论上,你也有可能看不到,如果你 vps 上的配置不太合适的话。假定你遇到了这种情况….(其实大部分情况下都会遇到,因为 sshd 的默认配置是不允许这种事情发生的

首先登录到 vps 机器,然后
sudo vim /etc/ssh/sshd_config
把下面这行配置放到 sshd_config 的末尾(其实放别的位置也可以的
GatewayPorts yes
然后 sudo service ssh restart , 再来一遍。

三、别急,还有一点技巧要说

你也许注意到我们在创建隧道的同时,每次都登录进远端机器并且拿到一个终端(而且还不能随便关闭….,一关隧道就断了)。这确实有点蛋疼多此一举,毕竟我们只想开个隧道。

ssh -nNT -R 8888:localhost:80 yourname@yourvps.com

注意上面的黑体参数。 -nNT 可以保你只开隧道,不进终端。

这其实是一篇翻译文章(然而并不忠实原文)

以上是关于简说 SSH 隧道-- Local 与 Remote 端口转发的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSH 隧道实现端口转发SOCKS 代理

localhost.run wordpress ssh 隧道

通过ssh建立点对点的隧道,实现两个子网通信

SSH隧道:本地=>网关=> MySQL服务器

流量操控之SSH隧道与端口转发

scp 通过 ssh 隧道打开