SSH连接
1、git下载
$sudo apt-get update $sudo apt-get install git
2、生成SSH公钥(开发端)
大多数Git服务器都会选择使用SSH公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的就要需要生成一个。一般SSH公钥默认存储在账户的主目录下的~/.ssh目录。
$ssh-keygen
第一次是让你设置公钥文件的位置和公钥文件名,后面两次是让你甚至公钥连接的密码,可以不设置密码则默认不设置密码。
3、架构服务器(Ubuntu远程服务器端)
1)创建一个操作git仓库的用户
$sudo adduser git
2)创建存放SSH公钥的管理文件
$su git $mkdir ~/.ssh $cd ~/.ssh $touch authorized_keys
3)将开发者的SSH公钥添加到git用户的authorized_keys文件中。
$cat /tmp/id_rsa.pub >> ~/.ssh/authorized
4)创建一个git裸库
$mkdir /opt/git $cd /opt/git $mkdir project.git $cd project.git $git --bare init
5)开发者操作提交(管理员)
$cd project $git init $git commit -a -m "initial project" $git remote add origin git@servername:/opt/git/project.git $git push origin master
6)一般开发者
$git clone git@servername:/opt/git/project.git
将项目clone下来就可以对其进行操作了。
7)限制git用户的活动范围
若是未禁止git的shell登录权限的话,开发者可通过git用户权限(ssh协议)直接访问服务器$ssh git@servername
$vi /etc/passwd
会看到git的用户信息git:x:1002:1002:git,,,,git:/home/git:/bin/bash,将其改为
git:x:1002:1002:git,,,,git:/home/git:/usr/bin/git-shell
如此,git用户就只能用ssh连接来推送和获取git仓库,而不能直接使用主机shell.尝试普通SSH登录,会直接拒绝。
公共访问
可以通过匿名的方式对git仓库进行读操作。或许对小型的配置来说最简单的办法就是运行一个静态的web服务。把他的根目录设定为Git仓库所在的位置,然后开启post-update挂钩(每当当前的仓库进行提交更新的时候,server就会执行hooks/post-update脚本命令)。基本步骤如下所示:
1、建立一个git 裸仓库
$mkdir publicaccess.git $cd publicaccess.git $git --bare init
2、打开post-update挂钩
$mv hooks/post-update.sample hooks/post-update $sudo chmod a+x hooks/post-update
git1.6之前版本,可省略mv操作,挂钩加后缀名.sample是之后版本才添加的
3、安装apache2,搭建web环境
$sudo apt-get install apache2 $vi /etc/apache2/apache2.conf
添加一个git裸仓库目录,如:
+</directory > + Options Indexes FollowSymLinks + AllowOverride None + Require all granted + $vi /etc/apache2/sites-enabled/000-default.conf
修改网页根目录,修改如下:
</virtualhost *:80> ServerAdmin webmaster@localhost + ServerName enjoytoday.cn + DocumentRoot /home/git ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
4、设置git仓库权限,并重启apache服务
$sudo chown -R git:www-data publicaccess.git $/etc/init.d/apache2 restart
重启apache2服务
5、读取git项目
$git clone http://enjoytoday.cn/publicaccess.git
如此就可成功让人读取你的git项目了