文章目录
现在的网络发达,个人电脑容量快速上升,想要保存的数据资料也越来越多。在平时,我们会将很多数据资料都会存在个人电脑上,甚至发展出专门的数据存储设备(NAS设备)。毕竟手机容量小,存太多东西会卡顿。但为了满足我们随时随地查阅这些数据资料的要求,又需要能随时安全的连入个人电脑和存储设备,这时SFTP服务就能大显身手。今天,笔者就为大家详细介绍,如何使用Cpolar内网穿透的FTP协议,搭建自己的SFTP服务器,能够随时随地安全的调取查阅本地电脑上的数据资料吧。
本质上来说,SFTP是一项传输协议,而为了执行这项传输协议,就需要相应的SFTP软件来执行,当硬件设备加上SFTP软件,就组成了执行SFTP协议的服务器。但通常这种服务器只能在局域网内提供服务,想要让这个服务器能被公共互联网上的设备访问到(可以是移动网的手机,也可能是安放在其他地方的电脑),就需要使用cpolar的内网穿透服务。
要搭建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的完全控制、修改、读取和执行、列出文件夹内容、读取、写入几个权限都勾选并保存。

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

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

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

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

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


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

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


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


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


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

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

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

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

回到安装了FreeFTPd服务器的电脑(当然我们也在这台电脑上安装了cpolar客户端),打开cpolar的客户端(可以在开始菜单中点击cpolar的快捷方式,也可以在浏览器中输入localhost:9200),用自己的账号密码登录后,点击cpolar主界面左侧隧道管理项下的创建隧道按钮,进入本地内网穿透数据隧道的设置页面。
当然,为了创建这条数据隧道,我们也需要对这条内网穿透数据隧道的特性进行设置,具体为:
固定TCP端口(固定TCP端口要将cpolar升级至专业版及以上);随机临时TCP端口;完成这几项设置后,就可以点击页面下方的创建按钮,生成一条完整的SFTP数据隧道

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

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

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

到这里,我们就成功完成了本地电脑的SFTP服务器设置,并让本地电脑上的资料文件,以SFTP协议进行传输,实现了随时随地调取、操作和访问本地电脑上文件资料的目的。当然,使用FileZilla进行远程访问只是为了方便演示,只要FreeFTPd服务器和cpolar数据隧道设置正确,我们也可以使用其他SFTP客户端软件访问本地电脑。
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信