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
是目标主机的端口号。
如果需要在本地内网访问服务器机房内网的数据库,只需要指定binding_address
和host
就可以了。
远程端口映射,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命令运行之后就能回到命令行,可以继续使用其它命令。