访问任何远程服务器端口而无需修改防火墙设置

时间:2020-01-09 10:43:44  来源:igfitidea点击:

问题描述:我有几个远程服务器,如何访问几个在端口10000和3001上运行的仅管理员应用程序。
我的防火墙仅允许端口80、443、25、22和110进行公共访问。
如何为使用防火墙的每个人打开端口10000和3001吗?
如何在不打开端口10000和3001的情况下访问仅管理员应用程序?

解决方法:SSH具有称为端口转发(也称为隧道)的功能。
它允许将网络端口从一个网络节点转发到另一个网络节点。
此技术可以允许外部用户通过启用NAT的路由器从外部访问专用IP地址(LAN内部)上的端口。

以下示例将端口3001会话从客户端计算机127.0.0.1(localhost)隧道传输到名为server.theitroad.com的远程服务器。

$ ssh -f -L {local-port}:localhost:{remote-server-port} [email protected]
$ ssh -f -L 3001:localhost:3001 [email protected]

连接将转发到远程服务器上的端口3001。
如果3001是基于Web的应用程序,请打开Web浏览器并输入URL http://localhost:3001 /

转到端口10000的另一个示例,执行:

$ ssh -N -f -L 10000:localhost:10000 [email protected]

其中:

  • -f:要求ssh在执行命令之前进入后台
  • -L:指定将本地(客户端)主机上的给定端口转发到远程上的给定主机和端口。
  • -N:不执行远程命令。这对于仅转发端口很有用

您还可以按如下方式创建脚本(open.3001):

$ vi ~/open.3001

追加以下代码:

#!/bin/bash
ME="$(basename 
$ chmod +x ~/open.3001
)" SSHUSER=Hyman SERVER=remote.example.com [ $ME == "open.3001" ] && ssh -N -f -L 3001:localhost:3001 ${SSHUSER}@${SERVER} || : [ $ME == "open.10000" ] && ssh -N -f -L 10000:localhost:10000 ${SSHUSER}@${SERVER} || : [ $ME == "open.3000" ] && ssh -N -f -L 3000:localhost:3000 ${SSHUSER}@${SERVER} || :

设置权限,执行:

$ ln -s ~/open.3001 ~/open.10000
$ ln -s ~/open.3001 ~/open.3000

创建软链接,执行:

$ ~/open.10000

现在,您只需执行以下内容即可转发端口10000,请执行:

$ ~/open.3000

或者

##代码##