git实在是太好太好用的版本控制工具。本文介绍使用ssh在局域网内部署git,实现局域网范围内代码的版本控制,和团队协作。服务器和客户端都是基于ubuntu的。
服务器
- 准备一台ubuntu作为服务器,建一个专用账户,命名为git,设置密码。然后登录。
- 安装git,在ubuntu的命令行下允许以下命令 apt-get install git-gui
- 安装ssh服务 apt-get install openssh-server
- 建立一个git仓库,用于后面的试验 mkdir ~/projectName.git git --bare init
客户端
- 客户端也以ubuntu为例。
- 测试ssh连接,服务器的ip以192.168.1.100为例 ssh git@192.168.1.100 不出意外,应该能连上服务器,这是后面的保证。 测试好ssh连接后,退出
- 安装git apt-get install git-gui
- 克隆git仓库 mkdir ~/work git clone ssh://git@192.168.1.100/home/git/projectName.git 会提示输入密码,然后开始克隆。 完成后,在~/work/projectName目录下就有克隆的git仓库了。 这个目录下什么文件都没有?当然什么都没有,因为还没有添加文件。 可以添加文件,修改,然后用git进行提交。 再用git push推送到git服务器。
免密码
每次用git命令要连接服务器的时候,都会提示输入密码,稍现麻烦。可以免密码。
- 生成ssh密钥 在需要免密的客户端,运行命令git gui打开git gui。 打开菜单:帮助 -> show ssh key -> generate key 拷贝生成的ssh密钥。
- 在git服务器端,打开文件~/.ssh/authorized_keys 然后把上面拷贝的ssh密钥粘帖上去,保存。
用这台客户端访问git服务器就不需要密码了。
安全问题
每个客户端都有git服务器的密码,都可以随意访问git服务器的话,会有安全问题。如果希望客户端能访问git服务器的仓库,但又不能随意登陆git服务器做其他的操作。首先,要完成上面的免密操作;再者,禁用ssh的shell登陆。
在服务器上打开/etc/passwd文件,找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash 修改为: git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell 这样,git用户可以正常通过ssh使用git,但无法登录shell。