局域网(校园网)内服务之间通过ssh -L互相访问
前言
同一个局域网内有两台linux服务器A和B,B上有一个服务,可以通过curl传输数据访问,现在想从A上也通过curl访问B上的服务
两种情况
如果B服务器上使用docker:
首先建立docker容器时,需要做端口映射
1 | docker run -p [host_port]:[container_port] [image] |
- host_port: 本地端口。你可以将这个端口号看作是你在本地主机上监听的端口。
- container_port: Docker容器内部的端口号。这是容器内程序正在使用的端口。
例如,如果你有以下的端口映射:
1 | docker run -p 8080:80 nginx |
这表示将本地主机上的8080端口映射到Nginx容器内部的80端口。因此,本地主机上的访问端口是8080,而容器内的应用程序将在80端口上监听。其实可以直接理解成把docker中的服务端口80,映射到本机的8080,供后续使用。
然后在服务器A上通过ssh反向代理实现
1 | ssh -N -L 10245:localhost:服务B的端口 用户名@服务器B的IP地址 |
-N
表示不执行远程命令,仅建立隧道。-L
表示本地端口转发。10245:localhost:服务B的端口
表示将本地的 10245 端口映射到服务器B上的服务的端口,也就是docker端口映射中的host_port
替换以下内容:
- 服务B的端口:服务器B上服务的端口号。
- 用户名:你在服务器B上的用户名。
- 服务器B的IP地址:服务器B的实际IP地址。
然后在服务器A上,使用 curl 访问本地映射的端口,即10245:
1 | curl http://localhost:10245 |
如果B服务器上使用conda:
这种情况就比较简单,首先在服务器B上启动好服务,然后去服务器A上启动反向代理
1 | ssh -N -L 10245:localhost:服务B的端口 用户名@服务器B的IP地址 |
然后在服务器A上,使用 curl 访问本地映射的端口,即10245:
1 | curl http://localhost:10245 |
小结
因为想在本地访问同一个局域网(校园网)的其他服务,因此通过ssh -L实现,小记。
评论