ssh内网穿透并搭建SFTP服务器

SFTP是SSH File Transfer Protocol的缩写,安全文件传送协议。SFTP与FTP有着几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至服务器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作。

链接方式:FTP使用TCP端口21上的控制连接建立连接。而,SFTP是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。安全性:SFTP使用加密传输认证信息和传输的数据,所以使用SFTP相对于FTP是非常安全。效率:SFTP这种传输方式使用了加密解密技术,所以传输效率比普通的FTP要低得多。

1,搭建环境

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 # 单次开启ssh sudo systemctl start ssh

2)建立反向代理

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

ssh -fCNR 50000:localhost:22 -o ServerAliveInterval=60 [email protected] -p 22

[email protected]用自己的公网IP和用户名代替!

解释(例子):

该命令实现的功能是,让一个远端机器的50000端口代理自己的22端口,这里所说的远端机器就是我们的公网服务器。执行如下命令查看是否启用该进程

ps aux | grep ssh

3,公网服务器配置

1)查看是否成功建立连接

netstat -antpul | grep 50000

此时,在公网服务器上测试连接下sftp服务器(usr用自己用户名代替)

sftp -P 50000 [email protected]

此时,也可以登录内网服务器

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服务器了。