2016-11-29 修正

关于 -R-L 后面的那串如何记忆的问题,
之前的理解其实不是很好的。

其实 6300:192.168.1.1:80 这串字符,无论是本地映射还是远程映射,
从左到右都是从远程到本地的顺序,只是通过参数来区分到底是远程映射还是本地映射。

另外什么是本地映射?本地映射就是,把远程主机的端口映射到本地的某个端口上,
为了解决的是,在本地局域网内,防火墙阻止访问远程主机的某个端口,
但是没有禁止访问远程22端口的情况。

什么是远程映射呢?远程映射就是把本地的端口映射到远程主机上,
解决的是防火墙阻止了局域网外的主机访问局域网内的某台机器的某个端口的情况。

2016-09-26 修正

如果用的是 openssh ,先设置 GatewayPortsyes,否则远程映射时,
在远端无法绑定到 0.0.0.0


原文:

使用ssh进行端口转发分为两种,本地转发和远程转发。

基本参数:

* -C 压缩
* -g global forward 全局转发,否则只能绑定到127.0.0.1
* -R 远程转发
* -L 本地转发
* -f 后台认证用户/密码,通常和-N连用,不用登录到远程主机
* -N 不执行脚本或命令,通常与-f连用。

本地转发:

local_forward
local_forward
1
ssh -C -f -N -g -L 6300:192.168.1.1:80 10.10.10.10

意思可以这么理解:

1
2
3
4
ssh连接到10.10.10.10上,告诉10.10.10.10,现在所有访问192.168.1.1上的80的数据
都会转发到你的6300上。

6300:192.168.1.1:80 这一串,可以理解为访问流是从右往左的。

远程转发:

local_forward
local_forward
1
ssh -C -f -N -g -R 6300:192.168.1.1:8080 10.10.10.10

意思可以这么理解:

1
2
3
ssh连接到10.10.10.10上,告诉10.10.10.10,现在所有访问你的6300的数据都转发到192.168.1.1的8080端口上。

6300:192.168.1.1:8080 这一串,可以理解为访问流是从左往右的。

附一个例子:

把本地的80端口映射到远程公网服务器(x.x.x.x)的8080端口上:

1
ssh -C -f -N -g -R 8080:localhost:80 x.x.x.x

参考:

http://blog.csdn.net/a351945755/article/details/21785647,图片使用了该文的图片。