私有云 Windows IIS搭建webdav服务实现公网文件共享「内网穿透」

Posted 小威要向诸佬学习呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了私有云 Windows IIS搭建webdav服务实现公网文件共享「内网穿透」相关的知识,希望对你有一定的参考价值。

文章目录

前言

常用的文件共享有三种:FTP、Samba、WebDAV。FTP虽然简单方便、容易部署,但它的的传输效率低、安全性不佳,目前并不推荐使用。SMB使用的是445端口,因为安全原因,445端口可能会被封掉,所以SMB在内网中的应用会受限。

而WebDAV是基于HTTP的共享协议,用户可以使用用户名和密码来访问存储资源,可供多个用户共享文件。并且,在windows上,我们可以通过系统自带的IIS服务来启用搭建webdav,并做内网穿透,实现在公网下的文件共享,搭建私有云服务。

本文使用的是WIN10 专业版。

视频教程

https://www.bilibili.com/video/BV15G4y1S7Ud/?spm_id_from=333.999.0.0

1. 安装IIS必要WebDav组件

1.1 打开控制面板,查看方式改为类别,进入程序——启用或关闭Windows功能

1.2 在Internet Information Services(IIS)中勾选IIS管理控制台Windows身份验证管理服务WebDAV发布目录浏览,然后确定安装。

1.3 完成安装后,在“Windows管理工具”中找到IIS管理器并打开。

1.4 在网站,按右键添加网站

1.5 为网网起个名,并且选择一个物理路径,这里,我起名称为webdav,路径选择:D:\\WebDav(选择想要共享的文件路径),端口号,我们设置为8090

1.6 选中webdav站点,并进入它的WebDAV创作规则

1.7 启用创作规则

1.8 添加创建规则

1.9 选择webdav站点,进入身份认证

1.10 启用基本身份验证,禁用Windows身份验证匿名身份验证

1.11 选中“webdav”,进入目录浏览

1.12 点击启用

1.13 重启webdav站点

2. 局域网浏览器访问测试

在浏览器中,输入http://127.0.0.1:8090/,就可以访问WebDav服务中的文件内容了。

输入windows账号密码登录

3. cpolar内网穿透

测试在局域网内访问成功后,接下来用cpolar做内网穿透,将其发布到公网上,实现在外也可以访问到家里/公司的webdav服务,进行文件共享,无需公网IP,也不需要设置路由器。

3.1 安装cpolar内网穿透

cpolar官网:https://www.cpolar.com/

在cpolar官网注册一个账号,并下载安装windows版本的客户端

3.2 登录cpolar web UI管理界面

cpolar内网穿透安装完成后,打开浏览器访问127.0.0.1:9200,并用cpolar邮箱账号登录。

3.2 创建隧道

登录到cpolar web UI管理界面后,点击左侧的隧道管理——创建隧道,我们来创建一条隧道将本地webdav服务映射到公网上。

  • 隧道名称:可自定义填写,注意不要与已有的隧道名称重复
  • 协议:选择tcp协议
  • 本地地址:8090
  • 端口类型:先按默认选择随机临时端口
  • 地区:按默认选择或者也可以选择China其他地区

点击创建

3.3 获取公网地址

隧道创建成功后,点击左侧的状态——在线隧道列表,我们可以看到,已经生成了一个TCP随机隧道,将其复制下来,接下来测试公网远程访问。

4. 公网远程访问

4.1 浏览器访问测试

我们在浏览器中,粘贴隧道地址,因为是从外网访问,会提示账号及密码进行身份验证。我们使用windows账号及密码登录。

4.2 映射本地盘符访问

在应用之前需要我们需要先修改注册表,需要修改注册表使得WIN10同时支持http和https,否则无法映射WebDAV网络驱动器的。因为如果WebDAV不是https的,win10默认是添加不上的,默认只支持https。

点击左下角开始菜单栏,右键点击运行

输入regedit,点击确定即可打开注册表编辑器

路径:计算机\\HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\WebClient\\Parameters

找到BasicAuthLevel后,右键点击修改,将数值数据改成2,并点击确定,修改成功后,重启电脑

打开文件夹,点击此电脑,点击上方的计算机——映射网络驱动器

输入刚刚通过cpolar映射本地8090端口所生成的公网地址,注意需要以http:// 格式填写

连接中

填写windows账号密码进行连接

连接成功,可以直接访问资源

4.3 安装Raidrive客户端

当然,我们还可以通过WebDav客户端,将远程服务器虚拟机本地盘符【无需修改注册表数据】,这里我们用Raidrive公户来实现。

Raidrive客户端下载地址:https://www.raidrive.com/download

安装Raidrive成功后,连接WebDav服务器

连接成功

5. 配置固定公网地址

目前测试使用的是随机TCP隧道创建的链接,所生成的公网地址会在24小时内会变化,如果需要长期使用,我们可以将其配置为固定的公网TCP地址,同时提高带宽。

5.1 保留固定TCP端口地址

配置保留固定的TCP端口地址,需要将cpolar套餐升级至专业版或以上才支持【登录cpolar官网后台——套餐

登录cpolar官网后台,点击左侧的预留,我们来为webdav保留一个固定的TCP端口地址

  • 地区:选择China或者China VIP
  • 描述:即备注,可自定义填写

点击保留

地址保留成功后,系统会返回一个固定的TCP端口地址,将其复制下来

5.2 配置固定TCP端口地址

登录cpolar web ui管理界面http://localhost:9200/,点击左侧的隧道管理——隧道列表,找到wwebdav隧道,点击右侧的编辑

修改隧道信息:

  • 端口类型:选择固定TCP端口
  • 预留的TCP地址:填入刚刚所保留成功的固定TCP端口地址

点击更新

隧道更新成功后,点击左侧仪表盘的状态——在线隧道列表,可以看到公网地址已经变成了固定的公网TCP端口地址。

6. 使用固定公网TCP端口地址远程连接

6.1 浏览器访问

在浏览器上访问固定公网TCP端口地址,测试正常。

6.2 映射本地盘符

使用固定公网tcp端口地址连接

连接成功

6.3 通过RaiDrive客户端访问

打开RaiDrive,修改一下之前的虚拟盘符的链接,将其改为我们配置成功的公网TCP端口地址,并点击连接即可。

图书推荐

【内容简介】
 Git是一款让人一开始觉得很容易学,但却很难精通的工具。本书除了介绍Git的相关知识外,还会模拟各种常见的状况,让读者知道应该在什么时候使用什么指令。
  《Git从入门到精通》共分11个章节,1~3 章介绍安装工具及环境,对于已经安装完成的读者可直接从第4章开始阅读。第5章介绍Git基本的使用方式,虽然难度不高,但却是整个Git系统的基础。第6章介绍Git中常用的分支功能以及使用情境,第7~9章则是介绍如何修改现有的历史记录、使用标签,以及如何应对其他常见的状况。
  前面的内容都是在自己的计算机上就可以完成的,从第10章开始介绍如何将自己计算机里的记录推一份到线上(GitHub)。*后一章(第11章)介绍团队开发时可能会使用的开发过程Git Flow。
  市面上的参考书籍或网络教程大多是教大家如何通过终端机指令来学习Git,这让不少想学习Git的新手打了退堂鼓。本书除了教大家如何在终端机视窗中输入Git指令,还搭配了图形界面工具,缓和了读者的学习曲线,让读者更容易上手。

评论区留言:人生苦短,我用cpolar,抽取两名幸运观众。

京东自营购买链接:点击跳转

利用阿里云搭建私有Git服务器

服务器系统:Centos 6 (查看centos版本命令:lsb_release -a

客户端系统:Windows 7

一、服务器端安装Git

==通常centos上使用yum源安装的git版本过低==

 

1. 检查系统上是否已经安装git,若已有则卸载

// 查看当前git版本
# git --version
git version 1.7.1

// 卸载旧版本
# yum remove -y git

 

2. 安装依赖包,下载最新版本git源码

# yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel
# wget https://github.com/git/git/archive/v2.13.2.tar.gz
# tar zxf v2.13.2.tar.gz

 

3. 安装git,配置环境变量

# cd git-2.13.2
# make prefix=/usr/local/git all
# make prefix=/usr/local/git install
# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
# source /etc/bashrc    // 实时生效 

 

4. 查看git版本号,正确显示则安装成功

# git --version
git version 2.13.2

 

5. 若编译时报错如下

libgit.a(utf8.o): In function `reencode_string_iconv\':
/usr/local/src/git-2.13.2/utf8.c:463: undefined reference to `libiconv\'
libgit.a(utf8.o): In function `reencode_string_len\':
/usr/local/src/git-2.13.2/utf8.c:524: undefined reference to `libiconv_open\'
/usr/local/src/git-2.13.2/utf8.c:535: undefined reference to `libiconv_close\'
/usr/local/src/git-2.13.2/utf8.c:529: undefined reference to `libiconv_open\'
collect2: ld returned 1 exit status
make: *** [git-credential-store] Error 1 

可以按照如下方式解决

// 对之前git的make 操作进行 make clean
# make clean
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
# tar zxf libiconv-1.14.tar.gz
# cd libiconv-1.14
# ./configure --prefix=/usr/local/libiconv
# make && make install
// 创建一个软链接到/usr/lib
# ln -s /usr/local/lib/libiconv.so /usr/lib
# ln -s /usr/local/lib/libiconv.so.2 /usr/lib

然后

# make configure
# ./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv/
# make && make install
# echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
# source /etc/bashrc

 

6. 配置git 用户名及邮箱(客户机安装后也要配置,在这里略过windows的git安装过程)

# git config --global user.name \'your name\'
# git config --global user.email \'your email address\'

 

二、服务器设置

1、添加一个git用户

# useradd git

 

2、初始化一个项目目录为一个仓库

su git
//git的~的实际地址为/home/git
cd ~
//yourName为自定义的仓库名称
mkdir yourName.git
cd yourName.git
git init --bare

 至此,我们的仓库完整地址为/home/git/yourName.git

【问题】:建立远程仓库使用 git init 命令,也可以增加 --bare 参数。写不写 --bare 参数有什么区别呢?

【答案】:

  我们知道,一般从远程 clone 下来的仓库会生成一个独立的目录,在这个目录下有当前分支最新版本的文件,同时还有一个 .git 文件夹,与 .git 同级的文件夹称为我们的“工作目录”,我们的修改都在这个目录中进行。而 .git 就是我们 Git 本地仓库的工作目录,我们 add 和 commit 的东西都会被提交到这个目录中。对 git init 命令添加 --bare 参数就表示初始化 Git 仓库的时候不要创建本地工作目录,所以相当于 .git 文件夹下的所有内容直接创建到当前目录下,而不是被放到 .git 目录下。在 Git 服务器上建立好仓库以后,用户就可以克隆这个仓库了。等等。。还没配置用户 SSH 公钥呢,这么就让用户去下载,肯定还是要输入密码才行的。

 

3、在 Git 服务器上为用户配置 SSH 公钥

 还是先在 Git 服务器上使用 authorized_keys 文件来管理所有用户的 SSH 公钥。(密钥登录的方式比密码登录更安全、更便捷,注意保管好自己的私钥,下面会讲到如何生成秘钥对)

git@Linux:~$ mkdir .ssh
git@Linux:~$ touch .ssh/authorized_keys
git@Linux:~$ chmod 600 .ssh/authorized_keys 
git@Linux:~$

注意:这里的authorized_keys跟配置好的centos的证书方式ssh登录不同(如已配置),我们git的证书文件路径为/home/git/.ssh/authorized_keys(ssh终端登录所用证书文件路径为/etc/ssh/authorized_keys,一般使用xshell或者putty等工具用的证书登录ssh所用的pub密钥信息都在里面)

 

4、打开服务器的RSA认证

# vim /etc/ssh/sshd_config
// 找到下面3行并去掉注释
 1. RSAAuthentication yes     
 2. PubkeyAuthentication yes     
 3. AuthorizedKeysFile  .ssh/authorized_keys

 重启sshd

service sshd restart

 

5、为安全起见禁用git用户shell登录

// 为安全起见,禁用 git 用户的 shell 登录
# vim /etc/passwd
// 修改 git 用户的 shell 为 git-shell,路径使用 which git-shell 查看
// 找到如下一行
git:x:1001:1001::/home/git:/bin/bash
// 修改成如下
git:x:1001:1001::/home/git:/usr/local/git/bin/git-shell

 重启sshd服务

service sshd restart

 

三、客户端开始使用

1、打开git bash

2、生成秘钥对

  2.1 客户机执行以下命令将在windows的“用户目录/.ssh”下得到秘钥对

cd ~/.ssh
ssh-keygen -t rsa -C “youremail@example.com” 

 

  2.2上传公共秘钥到git服务器有以下2种方式:

  ①复制到git服务器的/home/git/.ssh/authorized_keys文件末尾中;

  ②通过ftp等方式上传后,执行以下命令:

cat 源秘钥文件路径 >> /home/git/.ssh/authorized_keys


2、任意新建一个工作区文件夹

3、执行clone命令(输入自己的IP地址,端口默认为22,如有不同就加上去)

git clone git@ip:/home/git/yourname.git

 

4、随便新建个文件

5、提交

cd 项目文件下下
git add .
git commit -m "本次提交的备注"
git push

 

6、服务器端验证是否上传成功

cd /home/git/yourName.git/branches
git log

成功信息:

commit 087966c9f3f73f4aee153213213212132132ac191a7 (HEAD -> master)
Author: upLoadUserName <yourEmailAddress>
Date:   Tue Oct 9 08:59:21 2018 +0800

 

【遇到的坑】

1、回到家git clone一下发觉这玩意儿 Permission denied我了!

解决办法:再次百度鼓捣一趟,原来是的ssh-keygen的时候自定义了密钥的文件名,保持默认回车下去生成的id_rsa能够正常使用,ssh -v 服务器IP 一下发现可能客户端的git默认使用了id_rsa的私钥,待深入学习git考究(原谅我懒人不看git官网原著,专门看百度出来的博客被坑)

 

2、git push报错1

$ git push
Enter passphrase for key \'/c/Users/PC-name/.ssh/id_rsa\':
Enumerating objects: 145, done.
Counting objects: 100% (145/145), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (134/134), done.
fatal: sha1 file \'<stdout>\' write error: Broken pipe
error: remote unpack failed: unable to create temporary object directory
error: failed to push some refs to \'git@youripaddr:survey.git\'

缓存区不够大,搞大它

$ git config http.postBuffer 52428800

 

3、git push报错2

$ git push
Enter passphrase for key \'/c/Users/hp206/.ssh/id_rsa\':
Enumerating objects: 145, done.
Counting objects: 100% (145/145), done.
Delta compression using up to 4 threads.
Compressing objects: 100% (134/134), done.
Writing objects: 100% (145/145), 103.16 KiB | 685.00 KiB/s, done.
Total 145 (delta 64), reused 0 (delta 0)
error: remote unpack failed: unable to create temporary object directory
To youripaddr:yourprojectname.git
 ! [remote rejected] master -> master (unpacker error)
error: failed to push some refs to \'git@youripaddr:survey.git\'

权限的问题,因为不是服务器git用户创建的目录
到服务器git目录下

chown -vR git *

完美!

 

参考文章:

1.搭建私有git服务器进行版本控制
2.向git服务器添加shh公钥
3.搭建Git服务器遇到的那些坑

 

以上是关于私有云 Windows IIS搭建webdav服务实现公网文件共享「内网穿透」的主要内容,如果未能解决你的问题,请参考以下文章

IIS6.0(CVE-2017-7269) 缓冲器溢出

基于Linux下搭建NextCloud构建自己的私有网盘

CVE-2017-7269 IIS6.0远程代码执行漏洞复现

如何在Windows Server 2008 R2下搭建FTP服务

如何在windows8/7中建立WebDAV服务器实现访问或共享文件

windows映射坚果云的webDAV服务(灰常简单)