前言
只是一个ssh的基础命令,介绍一种应用场景。
背景
在没有公网ip的情况下,且不在同一个局域网内,但是it部门建了vpn,于是本地能连上服务器,但服务器连不上本地。为了安全或其他原因,不一定能让it帮你直接让服务器也连你本地。
下面此时以java的一种场景为例。
作为java开发,本地调试时,会把本地的服务注册到nacos,于是服务器的其他服务就会请求到本地,此时假设服务器连不到本地,那么当服务器负载到本地服务时,就会报错。本地调试就会很不方便。如果和你配合的前端,也在其他网络,无法直连你本地,也不好联调。
此时就可以用本文的方法,让本地联调不会受网络原因的限制增加难度。
参考网址
https://blog.csdn.net/DeepLens/article/details/155201359
https://www.php.cn/faq/2426394.html
方法
基础转发
假设本地有个服务端口是10000,此时本地可用如下命令配置转发
bat
ssh -R 10000:localhost:10000 server_user@server_ip 的作用
上面的命令可以让在服务器 curl localhost:10000 请求会转发到本地的 localhost:10000
注意:此处只能是localhost 或 127.0.0.1,不能是服务器ip地址
可通过服务器ip转发
假设想用服务器ip地址,需要修改 服务器/etc/ssh/sshd_config 将配置中的 GatewayPorts 改为 yes
GatewayPorts yes
服务器重启sshd
bash
sudo systemctl reload sshd
本地电脑配置转发
bat
ssh -R 0.0.0.0:10000:localhost:10000 server_user@server_ip 的作用
此时假设服务器ip为192.168.1.100,就可以访问服务器的 192.168.1.100:10000 转发到本地的 localhost:10000
ssh的其他配置
-N:不执行远程命令,仅建立隧道;
-f:后台运行。
-L 和 -R 相反,配置请求本地的端口转发到服务器的端口
如果是java nacos的负载问题,yaml要改成如下
yaml
spring:
cloud:
nacos:
discovery:
server-addr: ${server-addr}
namespace: ${namespace}
# ip 看具体配置看是要 localhost,亦或是服务器ip。
ip: ${ip}
port: 10000
其他方法
frp 应该也能做到类似的效果,但配置更复杂,还要额外装服务