说明:
以下讲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