前言

同一个局域网内有两台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实现,小记。