1)A端:在内网搭建SFTP服务器;内网环境:ubuntu 16.04/18.04
2)B端:在公网服务器上建立内网服务器的代理;公网服务器为阿里云服务器:ubuntu 16.04/18.04
3)C端:在其他内网或公网设备上访问SFTP服务器

2,内网服务器配置
1)安装ssh服务器
#更新源sudo apt-get update#安装ssh服务器sudo apt-get install openssh-server# 开机自动启动ssh命令sudo systemctl enable ssh# 单次开启sshsudo systemctl start ssh
2)建立反向代理
内网服务器的22端口和公网服务器的50000端口建立ssh连接
ssh -fCNR 50000:localhost:22 -o ServerAliveInterval=60 usr@88.88.88.88 -p 22
usr@88.88.88.88用自己的公网IP和用户名代替!
解释(例子):
该命令实现的功能是,让一个远端机器的50000端口代理自己的22端口,这里所说的远端机器就是我们的公网服务器。执行如下命令查看是否启用该进程
ps aux | grep ssh
3,公网服务器配置
1)查看是否成功建立连接
netstat -antpul | grep 50000
此时,在公网服务器上测试连接下sftp服务器(usr用自己用户名代替)
sftp -P 50000 usr@127.0.0.1
此时,也可以登录内网服务器
ssh usr@localhost -p 50000
2)正向代理
前面实现的反向代理端口50000,但这个端口只允许公网服务器内部访问。也就是说,只能先用ssh登录公网服务器,然后在终端上使用ssh访问50000端口才能真正登录到内网服务器。需要继续配置,才能实现任意第三方的访问。
公网服务器:让50010代理50000
ssh -fCNL :50010:localhost:50000 -o ServerAliveInterval=60 usr@localhost -p 22
解释(例子):
该命令实现的功能是,让本机50010端口指向一个远端机器的50000端口,而这里的远端机器恰好就是公网服务器本身。这样就可以任何机器访问内网的sftp服务器了。
3)代理进程开机启动
在~/.bashrc中添加上述指令即可
4)阿里云服务器的安全组配置
由于公网使用了阿里云服务器,所以要在安全组中开放22、50000、50010端口,其他云服务器也类似操作即可。
5)用sftp客户端访问服务器
通过以上操作,即实现了内网穿透,且可以从外网直接访问内网的sftp服务器了。