本文介绍git服务器搭建,不介绍客户端git创建及文本提交,客户端git使用、ssh密钥生成可参考末尾相关链接
运行环境
服务器:Linux ,客户端windows
IP:10.34.10.122 username:root,secret:password
1. 第一步,安装git
yum install git
2. 第二步,创建一个git用户,用来运行git服务
cd home
adduser git
若要设置密码,则:passwd git,输入密码即可,我的密码是:abcd1234,可根据喜好设定
清除密码命令:passwd -d git
3. 第三步,创建登录证书
ssh可同时支持publickey和password两种授权方式,publickey默认不开启。如果客户端不存在.ssh/id_rsa,则使用password授权,存在则使用publickey授权,如果publickey授权失败,依然会继续使用password授权。我们使用的是publickey授权方式,下面进行相关配置。
(1)收集所有需要登录用户的公钥,也就是id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件中,一行一个,如果没有.ssh目录,则创建目录。
mkdir .ssh
修改.ssh目录权限,权限必须为700
chmod 700 .ssh
chown -R git:git .ssh
公钥文件id_rsa.pub 上传至.ssh目录,执行命令,将公钥拷贝至authorized_keys文件。
cat id_rsa.pub >> authorized_keys
查看拷贝是否成功,不成功,重新拷贝。
cat authorized_keys
修改authorized_keys权限,权限必须为644
chmod 644 authorized_keys
(2) sshd相关配置,不可省略,编辑ssh服务配置文件,所在位置为/etc/ssh/sshd_config
RSAAuthentication yes #开启RSA认证功能
PubkeyAuthentication yes #开启公匙认证
StricModes no #据说不改会强制要求登录用户和文件拥有者用户相同
(3)sshd_config生效,重启sshd服务即可
service sshd restart
(4)如果要远程连接ssh ,需要把22端口的防火墙关闭,相关命令如下:
1) 重启后生效
开启:chkconfig iptables on
关闭:chkconfig iptables off
2) 即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop
4. 第四步,初始化git仓库
makir /home/git/repo #新建repo目录
cd /home/git/repo #切换到repo目录
git init --bare project.git #初始化仓库
chown -R git:git project.git #修改权限,project.git所在用户和组设为git
5. 第五步,禁用shell
出于安全考虑,第二步创建git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成,找到类似下面的一行
git:x:1000:1000::/home/git:/bin/bash
改为
git:x:1000:1000::/home/git:/usr/bin/git-shell
这样git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。而push到服务器的文件,用户无法看到。
6. 第六步,克隆远程仓库
git clone git@10.34.10.122:/home/git/repo/project.git (其中,10.34.10.122为hostname)
若克隆成功,会有类似下面的结果:
Cloning into 'project' ...
remote: Counting object : 8 , done.
remote: Compressing objects : 100% (5/5) , done.
remote: Total 8 (delta 0) ,reused 0 (delta 0)
Receiving objects:100% (8/8), done.
Checking connectivity ... done.
参考链接
(1)廖雪峰官方网站,git教程
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000
(2)Git项目管理——部署Git服务器
http://segmentfault.com/a/1190000000482168
(3)http://git-scm.com/
出现问题
问题1:Git error:“Please make sure you have the correct access rights and the repository exists”
解决问题链接:
http://stackoverflow.com/questions/25927914/git-error-please-make-sure-you-have-the-correct-access-rights-and-the-reposito
问题2:SSH关于公钥认证Permission denied(publickey,gssapi-with-mic的问题
SSH对公钥、私钥的权限和所有权的要求是非常严格的,总结如下:
1、下面两个目录的所有权必须是git,所属组也应该是git,权限必须为700
\home\git
\home\git\.ssh
2、下面公钥文件的所有权必须是git,所属组也应该是git,权限必须为644
\home\git\.ssh\authorized_keys
3、下面私钥文件的所有权必须是git,所属组也应该是git,权限必须是600,但我们的私钥在不需要上传至服务器,因此,忽略这一步
\home\git\.ssh\id_rsa