2016年4月

SSH端口映射

SSH提供了两种端口映射方式,一种是本地端口映射,另一种是远程端口映射。

使用本地端口映射,SSH客户端会在本地监听一个端口,所有到该端口的连接全部转发到SSH服务器上指定的主机和端口号上。例如,我需要在我自己的电脑上访问VPS服务器上的数据库,但是服务器上的MySQL绑定在了127.0.0.1的IP地址上,可以用下面的命令把我电脑上的33306端口转发到服务器上的3306端口。

ssh xts.so -l root -L 33306:localhost:3306

运行这个命令后,我就可以直接用MySQL客户端连接自己电脑的33306端口访问服务器数据库了。

SSH的-L参数完整格式是-L [bind_address]:port:host:hostport,其中bind_address是本机(客户端)的绑定IP,可以省略,缺省值是127.0.0.1,如果需要允许其它电脑访问,可以监听0.0.0.0或者简单写个*port是本机开始监听的端口,这个端口的连接会转发到服务器上;host是相对于服务器而言的目标主机地址,域名、hostname、IP地址均可;hostport是目标主机的端口号。

3497093050.svg

如果需要在本地内网访问服务器机房内网的数据库,只需要指定binding_addresshost就可以了。

远程端口映射,SSH会在服务器上监听一个端口,所有到该端口的连接全部转发到SSH客户端指定的主机和端口号上。例如,我需要让本机的80端口可以在公网访问,却又不能独立使用公网IP,可以找一台VPS服务器作远程端口映射。

ssh xts.so -l root -R *:8080:localhost:80

运行这个命令后,用浏览器打开http://xts.so:8080/就相当于访问我本地电脑的80端口。

SSH的-R参数完整格式是-R [bind_address:]port:host:hostport,其中bind_address是远程(服务器)的绑定IP,可以省略,缺省值也是127.0.0.1;port是远程服务器上开始监听的端口;host是相对于本地电脑而言的目标主机地址;hostport是目标主机的端口号。

SSH远程映射也叫反向端口映射,因为常用于把内网主机的22端口暴露到公网。

ssh xts.so -l root -R *:2222:localhost:22 -N -f

这个命令可以把服务器的2222端口映射到本机的22端口,从而允许从Internet登录内网服务器。-N告诉ssh不要运行任何命令,此连接只用于端口映射。-f选项可以让ssh转入后台运行,这样ssh命令运行之后就能回到命令行,可以继续使用其它命令。