搭建SFTP服务安全共享文件,实现在外远程访问「内网穿透」
文章目录
- 1.前言
- 2.本地SFTP服务器搭建
- 2.1.SFTP软件的下载和安装
- 2.2.配置SFTP站点
- 2.3.Cpolar下载和安装
- 3.SFTP服务器的发布
- 3.1.Cpolar云端设置
- 3.2.Cpolar本地设置
- 4.公网访问测试
- 5.结语
1.前言
现在的网络发达,个人电脑容量快速上升,想要保存的数据资料也越来越多。在平时,我们会将很多数据资料都会存在个人电脑上,甚至发展出专门的数据存储设备(NAS设备)。毕竟手机容量小,存太多东西会卡顿。但为了满足我们随时随地查阅这些数据资料的要求,又需要能随时安全的连入个人电脑和存储设备,这时SFTP服务就能大显身手。今天,笔者就为大家详细介绍,如何使用Cpolar内网穿透的FTP协议,搭建自己的SFTP服务器,能够随时随地安全的调取查阅本地电脑上的数据资料吧。
2.本地SFTP服务器搭建
本质上来说,SFTP是一项传输协议,而为了执行这项传输协议,就需要相应的SFTP软件来执行,当硬件设备加上SFTP软件,就组成了执行SFTP协议的服务器。但通常这种服务器只能在局域网内提供服务,想要让这个服务器能被公共互联网上的设备访问到(可以是移动网的手机,也可能是安放在其他地方的电脑),就需要使用cpolar的内网穿透服务。
2.1.SFTP软件的下载和安装
要搭建SFTP服务器,相关软件必不可少,这里我们采用FreeSSHd这款软件执行FTP协议,为了保证软件的干净,我们还是在其官网下载。官网下载地址为http://www.freesshd.com/?ctt=download,而下载的软件,则是FreeFTPd。

FreeFTPd软件下载完成后,直接双击就可以进行安装。安装过程也没啥可说的,一路next即可。

FreeFTPd安装完成后,可以在开始菜单中找到FreeFTPd软件的快捷方式,需要注意的是,我们需要右键点击软件,在出现的菜单中选择以管理员身份运行该软件,才能让所做的配置生效,一般用户身份运行就没法保存所做的配置。

打开FreeFTPd软件主界面后,点击左侧的SFTP选项,进入SFTP设置页面,在这个页面右下部,点击Start启动SFTP服务。

SFTP服务启动后,我们可以看到Server status栏位显示为Running,并在Prot:22端口输出。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdaQG8rq-1679361192516)(null#pic_center)]
启动SFTP服务后,我们先不着急保存退出,而是先建立一个用户。同样点击软件主界面左侧的Users,进入用户添加界面,点击Add按钮,添加一个用户。

添加用户时,自然需要进行一些关于用户的设定,比如用户名、用户密码、发布的磁盘(文件夹)、传输方式之类。这里我们将用户名定为test,共享的磁盘为E盘,传输协议为SFTP。完成这些设置后,就可以点击下方的“Apply”保存设置。


需要注意的是,我们需要将打算用SFTP发布的存储空间(硬盘或文件夹)审定好权限,防止访问这个存储空间时因权限限制而被拒绝。具体方法就是右键点击这个存储空间,选择右键菜单最下方的属性进入设置页面,点击安全选项卡,将Users的完全控制、修改、读取和执行、列出文件夹内容、读取、写入几个权限都勾选并保存。

2.2.配置SFTP站点
完成了FreeSSHd软件的设置,我们还要建立一个SFTP站点,让远程访问的请求有地方可去。这里我们选用FileZilla这款软件。同样的,这款软件也可以在其官网找到下载(https://www.filezilla.cn/)。

在选择对应操作系统的FileZilla客户端下载后,解压后找到filezilla.exe双击进行安装。

FileZilla客户端安装完成后,进入FileZilla客户端主界面,点击左上角的文件按钮,并在弹出的菜单中选择第一项站点管理器。

在站点管理器页面,我们点击新站点,并对这个新站点进行设置,设置内容主要为
-
协议(在下拉菜单中选择SFTP) -
主机(FileZilla服务器和FreeFTPd在同一台电脑上,因此输入本机地址127.0.0.1) -
用户名即密码(即FreeFTPd上我们设置的用户名和密码) -
完成这几项设置后,就可以点击下方的
连接进行连接测试。

出于安全和权限考虑,软件会进行几项权限询问,我们选择同意即可。


接着就能看到,本地用于SFTP传输的磁盘(文件夹)已经成功连接,这也算是对FreeFTPd的运行进行了测试,说明在局域网内已经可以正常用FreeFTPd执行SFTP协议连接。

2.3.Cpolar下载和安装
cpolar官网:https://www.cpolar.com/
接下来,我们就要安装SFTP服务器公共互联网发布的最后一个重要组件,也就是安装cpolar软件。Cpolar的安装十分简单,我们同样访问cpolar的官网,在官网找到下载按钮,找到适用操作系统的版本进行下载。


Cpolar下载完成后,将下载的压缩包解压,并双击解压后的.msi文件进入安装程序,接下来一路Next即可。


需要说明的是,cpolar主要通过使用者的用户名来建立该用户专属的数据隧道,因此我们需要在官网上注册,以便之后创建对应的数据隧道。


3.SFTP服务器的发布
在各项准备工作都完成后(安装FreeFTPd服务器,设置FileZilla站点,并本地连接FreeFTPd进行测试,安装并注册Cpolar),就可以正式进入FreeFTPd的公共互联网发布工作。
由于SFTP协议应用于文件传输,会对带宽有一定要求,同时对连接稳定性也有要求(即能够随时随地访问到),因此建议将cpolar升级到专业版及以上,以便能创建具备一定带宽和长期稳定存续的数据隧道(免费版cpolar每隔24小时会重置内网穿透数据隧道地址)。
3.1.Cpolar云端设置
想要建立稳定的内网穿透数据隧道,我们需要先登录cpolar的官网,点击官网主界面左侧的预留按钮,进入数据隧道预留设置页面。

在“预留”页面,我们找到保留的TCP隧道,并在此栏位对SFTP数据隧道进行几项简单设置。

在保留的TCP隧道栏位,我们需要设置的项目只有两项,分别是地区(即服务器所在位置,就近选择即可)和描述(即这条TCP隧道的备注,只要能方便自己区分就行)。

完成这两项设置后,就可以点击栏位右侧的“保留”按钮,将这条空白数据隧道保留下来,并生成一个公共互联网地址,稍后我们在进行cpolar客户端设置时,会用到这个地址,因此可以先将其复制下来。
当我们不打算使用这条数据隧道时,也可以点击右侧的x将这条数据隧道删除。

3.2.Cpolar本地设置
回到安装了FreeFTPd服务器的电脑(当然我们也在这台电脑上安装了cpolar客户端),打开cpolar的客户端(可以在开始菜单中点击cpolar的快捷方式,也可以在浏览器中输入localhost:9200),用自己的账号密码登录后,点击cpolar主界面左侧隧道管理项下的创建隧道按钮,进入本地内网穿透数据隧道的设置页面。
当然,为了创建这条数据隧道,我们也需要对这条内网穿透数据隧道的特性进行设置,具体为:
- 隧道名称:可直接看做数据隧道的备注,为方便区分,我们仍将这条数据隧道的名称设为SFTP连接;
- 协议:即数据隧道的传输协议,如网页、数据传输、设备互联等,这里选择TCP协议;
- 本地地址:这里需要填入软件(或内网设备)的端口号,由于FreeFTPd的默认输出端口号为22,因此此处填入22;
- 端口类型:即这条数据隧道的类型,是否为长期存续的隧道。
- 由于我们在cpolar云端设置了保留隧道,因此可以选择
固定TCP端口(固定TCP端口要将cpolar升级至专业版及以上); - 若只是临时使用,则选择
随机临时TCP端口;
- 由于我们在cpolar云端设置了保留隧道,因此可以选择
- 预留的TCP地址:在选择了“固定TCP端口”后就会出现该栏位,这里我们将cpolar云端生成的地址粘贴进来;
完成这几项设置后,就可以点击页面下方的创建按钮,生成一条完整的SFTP数据隧道

完成本地数据隧道的设置后cpolar客户端会自动转入隧道管理项下的隧道列表页面。在这个页面,我们能对这条数据隧道进行管理,如启动、暂停、删除这条数据隧道;也能看到这条数据隧道的运行情况(是否处于运行状态);还能通过“编辑”按钮对这条数据隧道的各项信息进行修改。
而这条数据隧道的入口(即公共互联网地址),则可以在装填项下的在线隧道列表页面找到。

在完成cpolar云端及客户端的数据隧道设置后,我们就能回到FileZilla软件,使用cpolar创建的数据隧道进行访问测试。
由于此时我们已经完成了对本地FreeFTPd的穿透和发布,因此已经可以在其他电脑的FileZilla软件上,设置新的SFTP传输站点,进行FreeFTPd远程访问。
4.公网访问测试
与前面的FileZilla的设置一样,我们先打开FileZilla客户端,并新建一个站点。为方便区分,笔者将这个站点命名为“Cpolar访问测试”,并将cpolar生成的公共互联网地址填入主机栏位;而端口栏位,则应该填入cpolar生成地址最后的几位数字;剩下的用户名和密码,则应填入FreeFTPd设定的用户名和密码。

设置完成后,点击页面下方的连接按钮,就可以连入局域网内的FreeFTPd服务器,对电脑上分享的文件资料进行操作。

5.结语
到这里,我们就成功完成了本地电脑的SFTP服务器设置,并让本地电脑上的资料文件,以SFTP协议进行传输,实现了随时随地调取、操作和访问本地电脑上文件资料的目的。当然,使用FileZilla进行远程访问只是为了方便演示,只要FreeFTPd服务器和cpolar数据隧道设置正确,我们也可以使用其他SFTP客户端软件访问本地电脑。
相关文章:
搭建SFTP服务安全共享文件,实现在外远程访问「内网穿透」
文章目录1.前言2.本地SFTP服务器搭建2.1.SFTP软件的下载和安装2.2.配置SFTP站点2.3.Cpolar下载和安装3.SFTP服务器的发布3.1.Cpolar云端设置3.2.Cpolar本地设置4.公网访问测试5.结语1.前言 现在的网络发达,个人电脑容量快速上升,想要保存的数据资料也越…...
ChatGPT优化Python代码的小技巧
使用 chatGPT 优化代码并降低运行时的云成本 许多开发人员说“过早的优化是万恶之源”。 这句话的来源归功于Donald Knuth。在他的书《计算机编程的艺术》中,他写道: “真正的问题是,程序员在错误的时间和错误的地方花费了太多时间来担心效率…...
Stm32-使用TB6612驱动电机及编码器测速
这里写目录标题起因一、电机及编码器的参数二、硬件三、接线四、驱动电机1、TB6612电机驱动2、定时器的PWM模式驱动电机五、编码器测速1、定时器的编码器接口模式2、定时器编码器模式测速的原理3、编码器模式的配置4、编码器模式相关代码5、测速方法六、相关问题以及解答1、编码…...
【JS】常用js方法
1、判断是否是数组、字符串等方法a instanceof ba是你需要判断的数据b是判断的类型//直接判断原型 var a [1,5,8] var b 123456console.log(a instanceof Array)//true console.log(a instanceof String)//falseconsole.log(b instanceof String)//true2、分割字符串a.split(…...
Android---动态权限申请
目录 权限分类 动态权限核心函数 简易实现案例 完整代码 Google 在 Android 6.0 开始引入了权限申请机制,将所有权限分成了正常权限和危险权限。App 每次在使用危险权限时需要动态的申请并得到用户的授权才能使用。 权限分类 系统权限分为两类:正常…...
【Linux】环境变量(基本概念 常见环境变量 测试PATH 环境变量相关命令)
文章目录环境变量基本概念常见环境变量测试PATH别的环境变量通过系统调用获取或设置环境变量环境变量相关命令export: 设置一个新的环境变量set: 显示本地定义的shell变量和环境变量unset: 清除环境变量通过代码如何获取环境变量环境变量 基本概念 环境变量(environment vari…...
安全牛+瑞数信息:《数据安全管控平台应用指南》报告共同发布
随着《中华人民共和国网络安全法》《中华人民共和国数据安全法》《中华人民共和国个人信息保护法》和《关键信息基础设施安全保护条例》“三法一条例”的陆续发布,从国家、社会与个人已经逐步形成了加强数据安全保护的态势。 2023年1月中旬,工业和信息化…...
【洛谷刷题】蓝桥杯专题突破-深度优先搜索-dfs(6)
目录 写在前面: 题目:P1683 入门 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述: 输入格式: 输出格式: 输入样例: 输出样例: 解题思路: 代码: AC &a…...
论文解读TCPN
一、简要介绍视觉信息提取(VIE)近年来受到了越来越多的关注。现有的方法通常首先将光学字符识别(OCR)结果组织成纯文本,然后利用标记级实体注释作为监督来训练序列标记模型。但是,它花费大量的注释成本&…...
性能优化之防抖与节流
(一)防抖 (1)定义:单位事件内,频繁触发,只执行最后一次(像王者荣耀的回城操作) (2)使用场景:搜索输入框、手机号邮箱输入检测 &…...
数组模拟单链表
实现一个单链表,链表初始为空,支持三种操作: 向链表头插入一个数; 删除第 k个插入的数后面的数; 在第 k个插入的数后插入一个数。 现在要对该链表进行 M次操作,进行完所有操作后,从头到尾输出整…...
蓝桥杯刷题第十四天
第二题:不同子串题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。一个字符串的非空子串是指字符串中长度至少为 1 的连续的一段字符组成的串。例如,字符串aaab 有非空子串 a, b, aa, ab, aaa, aa…...
面试了8家软件公司测试岗位,面试题大盘点,我真的尽力了
包含的模块:本文分为十九个模块,分别是:软件测试 基础、liunx、MySQL、web测试、接口测试、APP测试 、管理工具、Python、性能测试、selenium、lordrunner、计算机网络、组成原理、数据结构与算法、逻辑题、人力资源需要的可以看文末获取方式…...
Activiti 工作流简介
1、什么是工作流 工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。 1.2、工作…...
【华为机试真题详解 Python实现】统计差异值大于相似值二元组个数【2023 Q1 | 100分】
文章目录 前言题目描述输入描述输出描述题目解析参考代码前言 《华为机试真题详解》专栏含牛客网华为专栏、华为面经试题、华为OD机试真题。 如果您在准备华为的面试,期间有想了解的可以私信我,我会尽可能帮您解答,也可以给您一些建议! 本文解法非最优解(即非性能最优)…...
【C++】Google编码风格学习
Google规范线上地址:https://zh-google-styleguide.readthedocs.io/en/latest/ 文章目录1. 头文件2. 作用域3. 类4. 函数5. 其他C特性6. 命名约定7. 注释8. 格式1. 头文件 每个cpp/cc文件都对应一个h头文件,除单元测试代码和只包含main()的文件外。 所…...
JavaScript 中的Promise 函数
JavaScript 中的Promise 函数 目录JavaScript 中的Promise 函数1 创建Promise2 Promise的方法3 Promises的状态4 Promise的使用5 返回 Promise 类型6 Promise级联使用在现在的前端开发中我们常常会使用到 JavaScript Promise 函数,但是很多人都不能正确理解Promise …...
学校教的Python,找工作没企业要,太崩溃了【大四真实求职经历】
如果只靠学校学的东西去找工作,能找到工作吗? 今天给大家看一个粉丝的真实求职案例,想做Python方面的工作,投了二十几个简历却没人要,心态崩了。为什么没人要?我来告诉你答案。 然后我还会结合我的这些年的…...
快看!这只猫两次登上 Github Trending !!!
前几天我在逛 Github Trending,无意间发现这个Postcat 登上榜单 !好奇心驱使我去了解这个 Postcat。近期它上新了几个有意思的插件,其中 ChatGPT 插件,用户可以直接省去复杂的流程,直接体验 ChatGPT,懂的都懂ÿ…...
Linux->文件系统初识
目录 前言: 1 认识文件 2 文件使用 2.1 文件加载 2.2 外设文件使用 3 文件接口和文件描述符 3.1 文件系统调用接口 open: 3.2 文件描述符 4 缓冲区 前言: 在大家看这篇文章之前,我得提出几个问题: 1. 我们有多…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
