SSH本地端口转发

SSH本地端口转发

A在防火墙外,A上面的一个应用,需要访问B服务器上的某个端口,比如12345端口,但是有防火墙挡住了;

不过,幸运的是,A可以对B发起SSH连接,我们可以建立一个SSH本地端口转发隧道;

在A上执行这个命令 ssh -N -L 54321:localhost:12345 username@B

这个命令建立了一条SSH本地端口转发的隧道,界面会提示你输入username登录B的密码,如果没有异常,界面就阻塞在那里了,这是正常的;

命令参数解析:-L表示是Local Port Forwarding,-N表示不要打开B服务器的shell,54321:localhost:12345 username@B表示的含义是,在A电脑上访问A自己的12345号端口,就相当于通过B访问(B的)localhost的12345号端口;

然后,A上应用访问A的54321的数据,就会自动通过SSH的加密隧道发到B,然后B自动解密后,发给B自己的12345号端口。这样,A就实现了穿透防火墙到达B。

也许你不太喜欢A的SSH操作界面阻塞在那里了,我们可以这样:ssh -N -f -L 54321:localhost:12345 username@B

增加-f参数,让这个隧道进程在后台运行;

以上命令还默认的SSH连接B使用22号端口,如果不是默认ssh端口,还需要在最后使用-p参数;像这样:ssh -N -f -L 54321:localhost:12345 username@B -p ssh_port_of_B
如果A不是要访问B的端口,而是访问C呢?如下图:

A只能SSH到B,而B和C在一个局域网里面,A需要访问C的23456端口;

在A上创建本地端口转发,命令是 ssh -N -L 54321:ip_of_host_C:23456 username@B

这样,在A本地访问54321端口,就相当于通过B来访问C的23456号端口。

A穿透了防火墙,通过B访问C。命令行两个端口号中间的目的主机,是从B的视角来写的:访问B自己的某个端口,B看到的就是localhost,或127.0.0.1,访问C的时候,B看到的就是C的ip或域名!!
现在,我们在A上访问B和C,还有个问题,只能在A上使用localhost:54321来访问,能否让另一台能够连上A的电脑也访问呢?把A当成一个网关?答案是:可以的。

X与A在一个局域网,X不能ssh到B和C,只有A能ssh到B,B和C在另一个局域网;

现在,X想要访问C的33333端口;

我们可以在A上建立一条ssh本地端口转发的隧道,打通C的33333号端口,然后将这条隧道共享给X使用;

ssh -g -N -L 12345:ip_of_host_C:33333 username@B

多了一个-g参数(gateway),表示A把自己的12345端口作为网关;

这样,X通过访问ip_of_host_A:12345,就相当于在访问C的33333端口。


 上一篇
Maven入门 Maven入门
Maven入门Maven是一个采用纯Java编写的开 源项目管理工具。Maven采用了一种被称之为project object model (POM)概念来管理项目,所有的项目配置信息都被定义在一个叫做POM.xml的文件中,通过该文件,M
2020-08-09
下一篇 
修改svn保存的帐号密码 修改svn保存的帐号密码
修改svn保存的帐号密码如果装了TortoiseSVN:Settings -> Saved Data -> Authentication Data -> clear。即可清除保存的上个用户登录信息;当再次用到svn时,会提
2020-08-09
  目录