1. 内网服务器:建立反向代理

内网服务器的22端口和公网服务器的8022端口建立ssh连接

ssh -fCNR 8022:localhost:22 -o ServerAliveInterval=60 user_gong@100.100.100.100 -p 22
# ssh -fCNR [公网IP(可省略)]:[公网端口]:[本机IP]:[本机端口] [公网用户名@公网IP] -p [公网ssh端口(默认22)]
# 或者使用autossh:
# autossh -M 8999 -CNR 8022:localhost:22 user_gong@100.100.100.100 -p 22

该命令实现的功能是,让一个远端机器的8022端口代理自己的22端口,这里所说的远端机器就是我们的公网服务器。 执行ps aux | grep ssh可查看是否成功启动了该进程。

2. 公网服务器

查看是否成功建立了连接 netstat -antpul | grep 8022

也可以使用lsof查看进程PID,以便kill进程。 lsof -i:8022

至此,我们就可以在公网服务器上直接访问内网内网了! 从公网服务器的终端上直接登录到内网服务器: ssh user_nei@localhost -p 8022

从公网服务器的终端上向内网服务器/home/下发送文件: scp -P 8022 filename user_nei@localhost:/home/

3. 公网服务器:正向代理

前面实现的反向代理端口8022,但这个端口只允许公网服务器内部访问。也就是说,只能先用ssh登录公网服务器,然后在终端上使用ssh访问8022端口才能真正登录到内网服务器。那能不能直接从个人电脑上登录到内网服务器呢?能~ 公网服务器:让8023代理8022(*表示接受来自任意机器的访问)

ssh -fCNL *:8023:localhost:8022 -o ServerAliveInterval=60 user_gong@localhost -p 22
# ssh -fCNL [本机IP(可省略)]:[本机端口]:[远端IP]:[远端端口] [远端用户名@远端IP] -p [远端ssh端口(默认22)]
# 或者使用autossh:
# autossh -M 8999 -CNL *:8023:localhost:8022 user_gong@localhost -p 22

该命令实现的功能是,让本机8023端口指向一个远端机器的8022端口,而这里的远端机器恰好就是公网服务器本身。 执行ps aux | grep ssh可查看是否成功开启了进程。

4. 个人电脑使用ssh远程登录内网服务

ssh user_nei@100.100.100.100 -p 8023
# ssh [内网服务器用户名]@[公网服务器IP] -p [代理端口]

备注:若服务访问请注意ssh服务正常运行或重启服务

原文地址:https://blog.csdn.net/winter2121/article/details/116048685