基于分布式版本控制工具Mercurial的开发团队不一定需要一个统一的服务器端代码库。每个团队成员仅仅依靠TortoiseHG已足够支持代码共享、分支、合并等版本控制操作。对于利用分布式版本工具的企业开发团队而言,通过服务器共享统一的代码库有助于产品集成测试、发布自动化以及产品部署等工作流的控制和改进。
本文介绍如何用TortoiseHG,一个流行的、基于Windows的Mercurial客户端软件,通过SSH2加密通道与(团队共享的)Mercurial-server服务器端代码库进行交互。服务器端mercurial-server的配置已在“Mercurial服务器”介绍。利用Linux作为工作桌面的用户可参考“Linux客户端”中的指引。
本文介绍的Windows客户端配置背后的原理如下:
1) TortoiseHG通过自带的TortoisePlink.exe实现SSH2加密通信,
2) 代码库授权用户通过Pageant.exe辅助RSA非对称加密方式的自动身份认证,
3) 每个代码库用户的RSA密钥对应由自己通过PuttyGen.exe生成并把公钥提交给Mercurial-server管理员以进行服务器端的身份认证和权限配置。
本方案采用的mercurial-server依靠RSA密钥对进行用户身份认证和权限分配。所以,很显然每个用户都首先要为自己生成RSA密钥对(一个私钥+一个对应的公钥)。步骤如下:
# 下载PuttyGen.exe并运行,生成可用于OpenSSH2的密钥对
# 生成RSA密钥对
如下图所示,点选Generate开始生产RSA密钥对,Parameters下面的选项可选取加密算法和密钥长度,一般用默认的即可。
# 保存RSA密钥对
密钥对生产后将看到以下界面。强烈建议为你的私钥添加passphrase(密码),这样每次使用密钥时系统都会提示你输入打开密钥的密码。这是本方案的安全机制中最薄弱的环节,操作时务必认真谨慎。
点选Save publick key可将已生成的密钥对中的“公钥”导出到一个文件,建议命名方式为:user...@mycompany.com-pub-key。此公钥将需发送给mercurial-server系统管理员以便进行代码库权限配置。
点选Save private key可将已生成的密钥对中的“私钥”导出到一个文件,建议命名方式为:user...@mycompany.com-secret-.ppk。此密钥必须妥善保存,最好复制到USB盘后从硬盘删除。用户在以后每次使用TortoiseHG与服务器通信时,将使用Pageant.exe密钥代理导入此密钥,这样你每次通过TortoiseHG与服务器通信就不用输入任何密码。
3. 提交RSA公钥给代码库管理员代码库管理员依靠你的公钥让mercurial-server认证你的身份,并用来配置对应的用户-代码库权限。
4. 将私钥通过Pageant.exe导入内存每次通过TortoiseHG与服务器代码库进行交互前,都必须通过pageant.exe将用户的私钥导入内存/缓存。第一次导入时会提示输入RSA密钥打开密码,之后只要pageant.exe没退出,用户的密钥就会一直缓存到内存中,方便TortoiseHG进行SSH2加密通信时自动取用。
5. 测试代码库服务器连接上述配置完成后,可通过TortoiseHG进行一次clone操作,把类似ssh://hg@my-mercurial-server/my_repo的服务器端的代码库复制一份到本地计算机,以便测试上述配置是否已成功。
6. 开始使用TortoiseHG与团队协同工作当你的团队的mercurial-server、团队用户帐号、代码库都配置好后,即可开始利用此方案进行软件开发。如上面提到的,分布式版本控制支持十分灵活的工作流,本方案设立的开发环境一般可用来支持QA阶段的测试,以及各功能模块的集成测试,甚至围绕mercurial服务器构造团队自己的产品版本/阶段测试环境(stage server),直至你的产品正式发布、或者让新功能/功能改进自动融合到生产环境中。
7. 参考资料- Putty (Windows客户端)和OpenSSH的配置
- SSH代理转发,搞懂这个后你将可以通过SSH加密通道访问防火墙背后的mercurial-server代码库