您的位置:首页 > 其它

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

2017-11-21 09:27 344 查看

一、用 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