以Copssh和msysgit在winxp上架设git服务器
目录:
目录
以Copssh和msysgit在winxp上架设git服务器... 1
2 禁止Cygwin模拟Linux的权限管理体系... 18
1 建立一个拥有密码、非管理员的windows帐户:verman1. 22
2 在Copssh激活windows用户verman1. 25
六 配置verman1登录后访问git所需的路径:... 27
3 还需要配置C:\ICW\home\verman1下的.bashrc, 29
七将客户端puttygen生成的公钥加入授权文件... 30
2 在最高级别上限制CopsshUsers用户组对所有本地驱动器的访问。... 34
3 将Copssh用户加入到CopsshUsers组,... 38
1 使用puttygen制作密钥,运行puttygen程序... 53
五 将远程主机Sample-Project项目的克隆到本地... 70
前言:
近来git作为版本控制管理软件的风向越来越强,本人所在公司此前从未应用过任何版本控制软件,借机尝试架设一个分布式版本控制管理系统。由于公司仅为小型的IT公司,一直不准备在除Winxp以外的系统上架设Git服务器,因此遇到了一些特殊的困难。
好在还有互联网的帮助,本人终于成功地架设一个Winxp系统上的Git服务器。虽然没有解决Git版本控制管理系统应用中遇到的所有问题——只是成功架设了相应的Git服务器,并没有管理应用的完整实践,但是这已经足够使我深深体会到了作为Unix门外汉,且对SSH、git等等都没有深入了解的初学者,安装这样的系统并不容易。哪怕是仿照一个成熟的安装步骤在最常见的winxp系统上先行架设一个Git版本控制服务器来进行学习尝试也是不容易实现的。本文按照自己的实践(winxp有两种架设Git服务器的方案,本文仅介绍其中一种)将整个安装分步骤记录下来,供那些unix了解不深、甚至也不是一个软件开发工程师的git爱好者们参考。
下面是我用到的主要参考资料:
“如何在windows上架设Git服务器”(参考文档1)
“Setting up a Msysgit Server with copSSH on Windows” (参考文档2)
可以在Winxp上架设git服务器的解决方案
一 方案1:copssh + msysgit
这是一个非常简单而且灵活的方式。如果不涉及开发者对项目访问权限的管理问题,这是一个最经济高效的解决方案,本文介绍的就是这种安装模式。
其实一个小型团队开发一个或者多个在成员中完全公开的小型项目时,个人觉得这是最好的模式。但是尽管本文最后的Git服务器设置中也试图尝试建立一些访问权限控制,但是基本上可以说方案1不适合一个公司内部有多个开发项目,并且不同的成员具有不同的访问控制权限的情况。
二 方案2:cygwin + gitolite
gitolite,是以Perl重写的gitosis,提供强大的管理功能。比如能够设定谁可以进行对某分支的强制推送功能——如果不加这种限定,团队合作时允许这种推送将可能会引起严重的冲突。方案2可以解决方案1的权限问题,但是前者架设和管理肯定要比后者复杂一些,尤其是对那些不熟悉Unix,以及openssh的人。这个方案应该是大多数公司应该采用的版本控制管理系统架设模式(本文不予介绍,相关的安装参见“20100828 以cygwin和gitolite在winxp上安装git服务器.doc”)。
第一部分 安装Git Sever的过程
(深入了解服务器的安装可以阅读参考文档1和参考文档2)
一 需要软件
msysgit (服务器和客户端)
CopSSH (服务器)
TortoiseGit (客户端)
Putty (客户端,可选)
版本就不写了,找最新的就是
二安装步骤
1 安装msysgit
可以在按住“Ctrl”然后单击下载PortableGit-1.7.0.2-preview20100309.7z,然后解压缩出文件Git-1.7.0.2-preview20100309.exe用于安装。当然你也可以安装找到的msysgit最新安装包。
运行“Git-1.7.0.2-preview20100309.exe”。安装过程参考下图:
安装在缺省目录即可:
由于我们还要配套安装TortoiseGit,因此我们只选择msysgit的基础软件包,如下图:
我们将Git程序菜单安装在 所有程序>开发工具>下:
安装时请注意这个特别的选项:
选择将Git加入path (第二个选项) :“Run Git from the Windows Command Prompt”
本项缺省即可
下面开始安装
安装结束
2 安装CopSSH
可以在按住“Ctrl”然后单击下载Copssh_3.1.1_Installer.zip,然后解压缩出文件Copssh_3.1.1_Installer.exe。当然你也可以安装找到的msysgit最新安装包。
运行Copssh_3.1.1_Installer.exe。安装过程参考下图:
点击I Agree
安装在缺省目录
按照提示生成copssh的超级用户SvcCOPSSH和它的缺省密码。
开始安装
安装成功,弹出如下对话框:
确定,显示安装成功
3 安装TortoiseGit
你可以在按住“Ctrl”然后单击下载TortoiseGit-1.5.2.0-32bit.msi,当然你也可以安装找到的TortoiseGit最新安装包。
运行本文所在目录“Git 安装文档”下的“TortoiseGit-1.5.2.0-32bit.msi”,当然你也可以安装找到的TortoiseGit最新安装包。安装过程参考下图:
缺省:
缺省选择“TortoisePlink, coming from Putty, Which does better integrate with windows”
缺省
点击install
开始安装
安装结果
需要重新启动计算机
三修改CopSSH设置
1 禁止用户名密码的登录方式
打开C:\Program Files\ICW\etc\的sshd_config文件
没有扩展名的文件,请选择写字板打开(注意,最好用UltraEdit等软件修改这些配置文件,否则可能导致格式错误,本文采用了windows自带写字板软件),
寻找一行:“#PasswordAuthentication yes”
取消注释并设为"no" (取消注释,就是把该行前的“#”去掉,然后将“yes”改为“no”)
保存之后,退出。
2 禁止Cygwin模拟Linux的权限管理体系
打开C:\Program Files\ICW\etc\的fstab文件
请选择写字板打开,在里面添加这一行:
none / cygdrive binary,user,noacl,posix=0 0 0
然后保存退出。(注,用写字板软件修改fastab文件时,如果这一行是最后一行,一定要在该行最后加一个回车符,参见“windows 2003 server 使用cwrsync同步文件夹的权限问题”)
四 修改服务器网络连接的防火墙设置
打开windows > 控制面板 > 网络连接
在本地连接(如果使用其他的连接,请选择该连接)上点击右键,在弹出的右键列表中选择属性。
点击列表框中的高级
点击“通过限制或防止从internet访问此计算机来保护计算机和网络”后面的设置
将启用改为关闭。
五 建立一个账户
1 建立一个拥有密码、非管理员的windows帐户:verman1
(vermin_ABC或者Coder_DEF、TesterXYZ是我们的实际用户,这里的verman1是例子)
命名规则:
版本管理员,请用verman_ABC(ver代表version, man代表manager, ABC代表版本管理员的名字)
开发人员,请用Coder_DEF(Coder代表开发者, DEF代表开发者名字)
测试人员,请用Tester_XYZ(Tester代表测试者, XYZ代表测试者名字)
在windows控制面板中打开用户帐户, 创建一个新用户verman1
注意一定不要创建成计算机管理员,而是要创建成受限用户
然后点击这个新创建的用户
点击创建密码
为它创建密码
2 在Copssh激活windows用户verman1
开始 > 所有程序 > 开发工具 > Copssh > "Activate a user" (如果copssh菜单不是安装在开发工具中,请将其调整到开发工具子菜单下)
在左侧user name下拉列表中选择verman1, 其他的选项用默认(/bin/bash, 等)
点击next后,程序要求输入copssh生成的verman1的私钥访问控制密码,这个密码必须记住,将用来激活私钥。
该私钥并不会在我们的Git应用得到使用,我们要用到的是Putty生成的私钥。
点击Active弹出对话框,提示用户verman1成功激活。这个用户已经可以远程访问我们的主机了。
六 配置verman1登录后访问git所需的路径:
参考文档: “Windows下GIt入门试验配置教程单机版”和“建立了一个私有的Git源”
1创建git指令调用格式
首先、需要在Git的安装目录里找到cmd目录,这里就是C:\Git\cmd了。在里面创建如下几个文件: git, git-upload-pack, git-upload-archive, git-receive-pack
这四个文件都没有扩展名的,主要是给登录后,由bash执行的。每个文件都只有一行,具体方法如下:
git里写 git.cmd $*
git-upload-pack里写 git upload-pack $*
git-upload-archive里写 git upload-archive $*
git-receive-pack里写 git receive-pack $*
2在copssh profile文件中添加路径
下面就要给用户verman1登录本机时添加path了,保证上面添加的命令可以找到,并执行。找到CopSSH安装目录的etc下的profile文件。这里就是C:\ICW\etc\profile了:
在文件最后添加两行
gitpath=`/bin/cygpath C:/Git/cmd`
export PATH="$PATH:$gitpath"
3 还需要配置C:\ICW\home\verman1下的.bashrc,
在该文件的末尾添加刚才的命令(用写字板修改)
gitpath=`/bin/cygpath C:/Git/cmd`
export PATH="$PATH:$gitpath"
另请注意,这个文档在运行的时候会因为空行而在git运行时产生很多错误提示,因此请用“#”将所有的空行注释掉,然后保存退出(这是使用写字板修改.bashrc导致的问题,主要原因是windows文本文档的行结束符与UNIX文档的行结束符不同所致,用UltraEdit等编辑软件不会导致这样的问题)
七将客户端puttygen生成的公钥加入授权文件
客户端需要已经完成相应的安装,并且已经生成了含有verman1公钥的20100713 verman1-public-key.txt。参考“安装Git Client的过程”
打开20100713 verman1-public-key.txt(该文件可通过软盘、u盘、windows网络共享、sftp等方式传送到服务器,只要传递过程中未被篡改不存在安全问题),
再用写字板打开C:\Program Files\ICW\home\verman1\.ssh\ authorized_keys,
将20100713 verman1-public-key.txt内容(只有一行)复制到authorized_keys的最后一行,然后保存退出。
八安装一个git仓库,
为了今后权限管理的方便,我们要求所有Git仓库必须建立在一个独立的驱动器的根目录下。假定本地的H盘就是我们用来存储所有Git仓库的驱动器(而且我们希望它只用作存储git仓库。同时我们把它的卷标改为“Git Repository”)。
我们在windows文件夹中打开H盘,然后创建目录Sample-Project,并且这是我们用于测试的git仓库。
如果Sample-Project是某个正式的项目,那么该项目的版本管理员要将与Sample-Project项目有关的全部文档copy到这个Sample-Project文件夹,以便形成所有开发参与人员都可以访问的源仓库。目前这个Sample-Project项目只是用于测试,因此我们只在里面手工建几个文件,用于测试。
用TortoiseGit的图形界面指令将Sample-Project这个文件夹转为仓库。这个过程要在安装TortoiseGit后进行(将文档转化为Git仓库的过程可以参考“TortoiseGit使用入门”)。
九 限制该用户的访问权限
(参考文档:“How can I limit users' access to their home directories only”):
1 建立一个用户组CopsshUsers
打开windows控制面板 > 管理工具 > 计算机管理,选择“本地用户和组”下面的组
在“本地用户和组”下面的组上点击右键,选择“新建组”,然后组名里面输入:CopsshUsers,在描述中输入:所有通过copssh访问本机的用户。
点击创建,然后关闭,回到计算机管理的窗口,我们能够看到我们新创建的CopsshUsers组。
2 在最高级别上限制CopsshUsers用户组对所有本地驱动器的访问。
假定本机有C、D、E、F四个驱动器,但是驱动器C只有系统文件和程序文件,并不存有任何敏感信息,因此我们不限制CopsshUsers在这个驱动器的权限(这样会有一定的隐患,但是不是特别敏感的情况下,我们就选择这样操作,如果需要把驱动器C一并加以限制,可以参考注释1)。
打开桌面 > 我的电脑
在驱动器D上点击右键,选择属性,然后在列表框中选择安全(注,如果文件夹配置设定的是“使用简单的文件共享”将不会有下图的界面)
点击“高级”
点击“添加”,然后在“输入要选择的对象名称”下面输入CopsshUsers:
点击“确定”,在“拒绝”下的第一项“完全控制”将空白框选中:
点击“确定”,CopsshUsers被该驱动器完全拒绝访问的属性被添加
点击“确定”,弹出如下对话框。
点击“是”,CopsshUsers即被该驱动器完全拒绝访问
可以仿照C盘的上述做法对驱动器D、E、F做同样的操作,禁止用户组CopsshUsers的访问。
3 将Copssh用户加入到CopsshUsers组,
我们可以把已经创建的将会通过copssh远程访问本机的用户都加入到该组。现将已经创建的verman1添加到这个用户组。
打开windows控制面板 > 管理工具 > 计算机管理,选择“本地用户和组”下面的组
在右侧展示的所有用户组中双击CopsshUsers
点击“添加”,然后在“输入对象名称来选择”下面的空白处输入verman1
点击“确定”,verman1就被添加到CopsshUsers组中
4 设定git仓库的访问权限
我们假定Copssh用户中verman1是Sample-Project项目成员而verman2不是Sample-Project成员。(注,可以参照上一节的做法将verman2也加入CopsshUsers用户组,这是为了禁止verman2对驱动器D、E、F的访问)
4.1建立用户组CopsshUsers_out_Sample-Project
为了定义H:\Sample-Project目录的访问权限,建立一个COPSSH专有用户组CopsshUsers_out_Sample-Project
打开windows控制面板 > 管理工具 > 计算机管理,选择“本地用户和组”下面的组
在“本地用户和组”下面的组上点击右键,选择“新建组”,然后组名里面输入:CopsshUsers_out_Sample-Project,在描述中输入:所有不属于Sample-Project项目的copssh访问本机的用户。
点击“创建”,然后点击“关闭”,用户组CopsshUsers_out_Sample-Project,就被创建了
将所有不属于Sample-Project项目的Copssh用户(本例中只有verman2)全部加入到专有用户组CopsshUsers_out_Sample-Project中
打开windows控制面板 > 管理工具 > 计算机管理,选择“本地用户和组”下面的组
在右侧展示的所有用户组中双击CopsshUsers_out_Sample-Project
点击“添加”,然后在“输入对象名称来选择”下面的空白处输入verman2
点击“确定”,verman2就被加入CopsshUsers_out_Sample-Project组中
4.2 设置对H:\Sample-Project目录的访问权限
限制COPSSH专有用户组CopsshUsers_out_Sample-Project对H:\Sample-Project目录的访问权限
打开驱动器H:\
在Sample-Project文件夹上点击右键,选择属性,然后在列表框中选择安全(注,如果文件夹配置设定的是“使用简单的文件共享”将不会有下图的界面)
点击“高级”
点击“添加”,然后在“输入要选择的对象名称”下面输入CopsshUsers_out_Sample-project:
点击“确定”,在“拒绝”下的第一项“完全控制”将空白框选中:
点击“确定”,CopsshUsers_out_Sample-project被该驱动器完全拒绝访问的属性被添加
点击“确定”,弹出如下对话框。
点击“是”,CopsshUsers即被该驱动器完全拒绝访问
这样我们就把所有没有不属于Sample-Project项目的Copssh用户限制在了Sample-Project文件夹的授权访问之外,从而保证了该文件夹的安全。(注,由于通过copssh远程访问时对目录访问权限的解析问题,我们强烈建议所有的项目仓库都建立在H盘的根目录之下,并且每个项目DEF都建立一个CopsshUsers_out_DEF项目组,然后对H:\DEF目录限制CopsshUsers_out_DEF的访问权限)
注释1 限制Copssh用户对驱动器C的访问。
同时开放它们对C盘中COPSSH安装目录(copssh-inst-dir,非全路径名而是安装所在文件夹名,本例是ICW)、Git安装目录
1 限制对驱动器C的访问
在最高级别上限制CopsshUsers用户组对所有本地驱动器的远程访问,这可以仿照第十章第2节对D驱动器的访问权限禁止来禁止对驱动器C的访问
2 开放对copssh和git安装目录的访问
允许该用户组访问COPSSH安装目录(copssh-inst-dir,非全路径名而是安装所在文件夹名,本例是C:\program files\ICW)、Git安装目录(git-inst-dir非全路径名而是安装所在文件夹名,本例是C:\program files\Git),在控制台里面输入如下命令
c:
cacls ICW /c /e /t /r CopsshUsers
cacls git /c /e /t /r CopsshUsers
第二部分 安装Git Client的过程
一需要软件
msysgit (服务器和客户端)
TortoiseGit (客户端)
Putty (客户端)
版本就不写了,找最新的就是
另外要有:
服务器地址:192.168.1.100 (以此为例)
服务器上用户的ID:verman1
二 安装步骤
1 安装msysgit
略,参见“【原创首发】以Copssh和msysgit在winxp上架设git服务器(二)”。
2 安装TortoiseGit
略,参见“【原创首发】以Copssh和msysgit在winxp上架设git服务器(三)”。
3 安装Putty
可以在按住“Ctrl”然后单击“PuTTY”下载putty-0.60-installer.exe。当然你也可以安装找到的Putty最新安装包。
运行putty-0.60-installer.exe。安装过程参考下图:
使用缺省安装目录
我们将Putty程序菜单安装在 所有程序>开发工具>下:
如果你要经常远程登录主机进行操作,你可以将Putty装入快速启动栏或者放在桌面上
点击install
安装成功
三创建服务访问用的RSA keys
(参考:“putty使用密钥登陆OpenSSH”)
1 使用puttygen制作密钥,运行puttygen程序
开始 > 所有程序 > 开发工具 > PuTTy > PuTTygen
启动puttygen工具,为兼容OpenSSH密钥,选择“SSH2 RSA”:
为了较高的安全性,我们将密钥的长度从1024改成2048
单击 Generate 按钮,并使用鼠标在“key”框内移动,以获得足够的随机数据供生成密钥使用:
- 期间,你会看到进度条上面有个提示“Please generate some radomness by moving the mouse over the blank area.”,意思就是让你用鼠标在空白区域随机移动。随着鼠标在空白区域的移动,进度条会一直走下去。停止移动鼠标,进度条也就停止了。所以,那我们要移动鼠标,直到进度条走满为止。
完成后的窗口如下:
其中:
Key comment:是注释,不会影响密钥的有效性,但可作为自己用于区别其他密钥的参考;
Key passphrase 和 Confirm passphrase :用于保护私钥,如果不输入该信息,那么任何人只要拿到该私钥,即可无密码登陆系统,非常危险;通常情况下,我是建议大家输入的,但这里为了方便说明,暂时留空,请看后面使用的说明。
随后,点击“Save private key”保留私钥。
如果没有输入Key passphrase信息,会有警告:
请将使用此RSA密钥的用户名输入到注释行,我们这里是verman1,因此注释行如下修改:“verman1-rsa-key-20100713”。另外,将verman1使用私钥时的访问控制密码输入到相应的Key passphrase 和Confirm passphrase。
再次点击“Save private key”保留私钥。
输入私钥的文件名,请用“20100713 verman1-rsa-key.ppk”将私钥保存到安全的地方,比如一个别人轻易接触不到的U盘。
※我们不需要通过PuTTygen的“Save public key”按钮保存公钥信息,Puttygen可以从私钥得到它,而且这样保留的公钥也不符合copssh要求的格式。
2 为上传服务器保存公钥信息
上面密钥信息窗口的“Key”框最后生成的就是公钥信息:
将方框内的ssh-rsa开始的内容,全部复制到windows记事本,并且将其保存成20100713 verman1-public-key.txt
3 拷贝上述公钥文件到服务器
方式有多种:软盘,U盘,Windows网络共享,sftp上传到服务器,我们直接将其放在一个可以被自由访问的windows网络共享文件夹内。
4 设定私钥代理
运行 开始 > 所有程序 > 开发工具 > PuTTy > Pageant.exe,这个程序启动后自动缩小到右下角的隐藏起来。
双击打开,
用AddKey,将新生成的20100713 verman1-rsa-key.ppk加入,
在询问密码时输入私钥访问控制密码
Verman1的私钥就被成功地加载到pageant,这样就不会每次用到私钥时都输入密码了。
注意: 每次windows重新启动后,都需要运行Pageant.exe, 并输入指定私钥的控制密码.
四使用RSA keys用PuTTy登录服务器
打开 开始 > 所有程序 > 开发工具 > PuTTy > PuTTy.exe
Host Name(or IP address)下面空白处,填入主机ip地址192.168.1.100
在窗口左侧列表中选择connection > Data,在右侧的Auto-login username后面填入:verman1
在窗口左侧列表中选择connection > SSH > Auth,在右侧的Allow agent forwarding前面选择框里面加选定。
然后点击Browser,然后找到第四章第一节保存的私钥
点击“打开”
在窗口左侧列表中选择session,在右侧Saved Sessions下面的空白处输入:20100714 verman1 RSA
点击“保存”
这个登录设定就被保存起来,以后每次只要从下面的列表中选择这个保存起来的设置,然后点“Load”,就可以调用本设置。
点击“Open”,弹出如下窗口:
这是要告诉你登录的主机密钥指纹,点 “Yes” 就保存起来,以后就不会再弹出这个窗口,然后就正常登录。
点 “No” 不保存,下次还是要提示你,然后也可以正常登录。如果一台主机我们只是临时登录一下,当然就是点 No 了。Cancel 就是取消,也就是取消了这次登录。
如果你曾经登录过这台主机,但是又弹出来这个对话框,可能有以下几种情形:
• 主机重新安装了操作系统
• 这台主机可能有多个IP,这次用的是另外一个 IP
• 有其他不怀好意的主机来冒充,诱骗我们登录,窃取隐秘信息
前两个情形很常见,一般点 Yes 就行了。
这里我们就输入原来设定的verman1私钥访问控制密码
这是我们已经正确地登录到主机,我们可以进行各种cygwin授权操作了。
一般提醒注意的是,当我们结束访问,最好不要直接点击窗口右上角红叉,来关闭这个窗口,而是要在命令提示符下输入exit,然后回车来关闭远程访问窗口。这样做的好处一个是可以将远程主机内存中不应该再驻留的访问进程终止,而且能够保证那些需要驻留在远程主机的进程继续工作。
五 将远程主机Sample-Project项目的克隆到本地
为了今后权限管理的方便,我们要求所有Git仓库必须建立在一个独立的驱动器的根目录下。假定本地的K盘就是我们用来存储所有Git仓库的驱动器(而且我们希望它只用作存储git仓库。同时我们把它的卷标改为“Git Repository”)。
打开驱动器K
在其中空白处点击右键,在右键菜单中选择“Git Clone…”,
然后在“Url:”后面输入:verman1@192.168.1.100:h:\Sample-Project
点击Load Putty Key 后面的浏览按钮“…”,找到我们先前保存的verman1的私钥20100713 verman1-rsa-key.ppk,将其load进来。
点击“ok”,第一次操作可能不成功,
这是因为没有来得及输入私钥的访问密钥,输入后。重新在K:\ 空白处点击右键,在右键菜单中选择“Git Clone…”,然后直接点ok
最后提示成功
原仓库就被成功地克隆到本地。
我们在“K:\ Sample-Project”文件夹上点击右键,选择“Git Sync…”
点击“Pull”,就可以将远程主机源仓库的最近更新,拖动到本地这个仓库