centos搭建git服务器

说明:
以下讲Centos下安装git服务器。
git是通过ssh的22端口(默认)连接的,所以如果git没响应的话,可以看下防火墙是不是限制了
不需要为git用户添加密码,git clone时需要密码,一定是你密钥设置出错(如密钥文件权限过大这些)

具体:
一、在git服务器操作
1.1 在git服务器上安装git

# yum install git

 
1.2 新建linux用户,用户为git,不需要为git用户添加密码,git clone时需要密码,一定是你密钥设置出错(如密钥文件权限过大这些)

# useradd git

 
1.3 在git用户目录中新建目录 .ssh

# cd /home/git/
# mkdir .ssh
# touch authorized_keys ##在/home/git/.ssh/目录中新建authorized_keys文件,稍后会将客户端公钥(id_rsa.pub)黏贴到该文件中
# chown -R git.git /home/git/.ssh/

 
1.4 创建一个git空仓库,假如项目目录为/data/git/coolnull.git

# cd /data/git/
# git init --bare coolnull.git
chown -R git.git coolnull.git  ##将coolnull.git项目所有者、组设置成git

 
1.5 出于安全考虑,修改git的shell,禁用git登录。
通过yum安装的,其实git用户的shell已经是/usr/bin/git-shell,所以这步可以跳过

# grep git /etc/passwd
git:x:501:501::/home/git:/usr/bin/git-shell

试下用git用户登陆

# ssh git@x.x.x.x

fatal: What do you think I am? A shell?
Connection to x.x.x.x closed.

 
1.6 git服务器打开RSA认证

# vim /etc/ssh/sshd_config  ##将以下3项前面的#删除,取消注释
RSAAuthentication yes     
PubkeyAuthentication yes     
AuthorizedKeysFile  .ssh/authorized_keys

# /etc/init.d/sshd restart  ##重新ssh,使配置生效

 
二、在客户端操作
2.1 在客户端生成公钥

# ssh-keygen -t rsa -N "" -C "coolnull"  ##-N参数指定空密码,-C为添加备注,方便区分
# ll
-rw-------  1 root root  1675 Feb 27 15:20 id_rsa
-rw-r--r--  1 root root   402 Feb 27 15:20 id_rsa.pub
# cat coolnull.pub ##...为省略前面的内容,可以看到公钥id_rsa.pub中有一个coolnull,便于跟其它公钥区分
ssh-rsa ......== coolnull

 
2.2 修改生成的密钥权限。git clone需要密码,一定是你密钥设置出错(如密钥文件权限过大这些)

# cd ~/.ssh/
# chmod 600 id_rsa  ##修改id_rsa密钥权限为600

 
三、在git服务器上操作
3.1 将上一步客户端生成的id_rsa.pub复制到git服务器上的/home/git/.ssh/authorized_keys文件

# cd /home/git/.ssh
# cat id_rsa.pub > authorized_keys  ##id_rsa.pub请提前上传到git服务器上
# cat authorized_keys  ##...为省略前面的内容,authorized_keys里可以放多个公钥,一行一个
ssh-rsa ssh-rsa ......== coolnull
ssh-rsa ssh-rsa ......== coolnull2

 
四、测试
4.1 在客户端测试git

# mkdir test
# git clone git@x.x.x.x:/data/git/coolnull.git test/   ##x.x.x.x为git服务器地址,/data/git/coolnull.git为git项目的完整路径
Cloning into 'test'...
warning: You appear to have cloned an empty repository.   ##这只是说这个git项目是空仓库,没问题
# ll -a test/
total 12
drwxr-xr-x  3 root root 4096 Feb 27 17:08 .
dr-xr-x---. 4 root root 4096 Feb 27 17:08 ..
drwxr-xr-x  7 root root 4096 Feb 27 17:08 .git

 
附录:
附录1:可以通过-f指定生成的密钥对名称,用于区分多个用户。这通常用于单客户端通过多个密钥登陆多台git服务器

# cd ~/.ssh/
# ssh-keygen -t rsa -N "" -C "coolnull" -f coolnull  ##可以通过-f指定保存的密钥名称。但指定了密钥名称,就需要在客户端配置config,指定使用的密钥。
# chmod 600 id_rsa  ##修改id_rsa密钥权限为600
# vim config  ##内容如下,x.x.x.x为git服务器地址,IdentityFile 指定使用的密钥
Host x.x.x.x
    HostName x.x.x.x    
    User git
    Port 22
    IdentityFile ~/.ssh/coolnull

如果有多个git服务器要登陆且使用的密钥不同,可以通过config来指定使用的密钥。
Host x.x.x.x
    HostName x.x.x.x    
    User git
    Port 22
    IdentityFile ~/.ssh/coolnull
Host y.y.y.y
    HostName y.y.y.y    
    User git
    Port 22
    IdentityFile ~/.ssh/coolnull2

发表评论

邮箱地址不会被公开。 必填项已用*标注