Git客户端配置流程
1. 配置用户名密码
git config --global user.name “用户名”
git config --global user.email “邮箱”
用户名建议使用个人姓名,这在提交代码时记录的Author即为你配置的用户名
邮箱可以为任意的内容,为了规范性建议填上本人的腾讯邮箱地址
2. 生成公钥文件
ssh-keygen -t rsa
第一步:输入公钥文件生成位置(默认路径c/Users/Administrator/.ssh)
第二步:输入密码,你可以不输入直接回车,也可以输入密码,这是你push/pull等操作的时候需要输入的密码,不输入即没有密码,输入密码可以提高安全性
3. 提供公钥文件
打开公钥文件生成路径,在.ssh目录下有一个id_rsa.pub即为公钥文件,提供给git管理员进行配置后,你就可以利用id_rsa私钥文件来拉取远程的仓库和提交代码了
4. 拉取远程仓库
git clone [email protected]:/xxx/xxx.git
配置好公钥之后,根据git管理员提供的仓库地址进行拉取即可
Git服务端配置流程
1. 添加用户
#添加一个git用户,作为管理git的用户
adduser git
2. 新建存放公钥的文件
# 创建目录.ssh
mkdir /home/git/.ssh
# 给该目录授予权限700
chmod 700 /home/git/.ssh
# 创建文件authorized_keys
touch /home/git/.ssh/authorized_keys
# 给该文件授予权限600
chmod 600 /home/git/.ssh/authorized_keys
# 由于权限设置问题(只有“文件所有人”才能操作),需要把把“文件所有人”更改为git用户
chown -R git:git /home/git/.ssh/
3. 开启RSA认证
vim /etc/ssh/sshd_config
# 修改sshd_config配置文件,追加以下三行
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# 使该配置文件即时生效
systemctl restart sshd
4. 创建仓库(这个步骤可以忽略,直接跳到第6步,测试步骤)
# 新建一个空白目录blog.git,作为Git仓库
mkdir -p /home/gitrepo/blog.git
# 初始化仓库,--bare表示只生成一个裸仓库,没有工作目录(.git),会保存git历史提交的版本信息。
git init --bare /home/gitrepo/blog.git
# 将该目录的所有人改为git用户
cd /home/gitrepo
chown -R git:git blog.git
5. 配置客户端公钥(这个步骤可以忽略,直接跳到第6步,测试步骤)
# 在authorized_keys文件里面添加即可,一行一个公钥
vi /home/git/.ssh/authorized_keys
6. Git仓库权限管理
# 切换到git账号
$ su git
# 进入git主目录
$ cd /home/git
# 下载gitolite的仓库
$ git clone https://github.com/sitaramc/gitolite
# 创建bin文件夹,必须!!!
$ mkdir -p $HOME/bin
# 用下载下来的仓库中的insall执行安装操作,指向的目录就是上一命令行创建的目录
$ ./gitolite二进制/install -to $HOME/bin
# 把上传到服务器的 管理员的公钥setup到gitolite中,注意:YourName.pub改成你自己的文件名。通过xshell上传上去的pub配置会报错FATAL: die'*.pub' not a readable file,只有通过scp上传到git用户地址才能正常配置scp *pub git@ip:*pub
$ ~/bin/gitolite setup -pk admin.pub
# repositories目录下已经有了两个git仓库了。
-- gitolite-admin.git # 管理配置权限的仓库
-- testing.git # 测试仓库
#下载远程管理仓库, 请把aicoder.com换成你自己服务器的域名或者ip
$ git clone [email protected]:gitolite-admin
$ cd gitolite-admin
# 目录结构如下:
# ├── conf # 配置文件夹
# │ └── gitolite.conf # 配置权限的文件
# └── keydir # 客户端的公钥文件夹,所有伙伴的公钥要放到此目录下
# └── melon.pub
添加其他开发的小伙伴
把小伙伴的公钥发给管理员。管理员添加到gitolite-admin仓库的keydir目录下,注意文件名字格式为username.pub,username就是配置权限时的用户名。
配置用户对仓库的读写权限
直接修改conf文件夹下的,gitolite.conf文件。简单解释下几个用法:
repo代表仓库的意思,如果新添加一个repo,代表服务端新建一个空仓库,仓库push到服务端后会自动创建。
RW 代表可读可写
@all 代表所有人。
master和 dev代表分支
参考:
@admin = malun
@om = malun bcd
repo gitolite-admin
RW+ = malun
repo testing
RW+ = @all
repo om
RW+ = @admin
RW+ master = @admin
RW+ dev = @om
应用修改到服务器端
做好配置后,由管理员把修改push到服务器端,会自动处理。
$ git add conf
$ git add keydir
$ git commit -m "added foo, gave access to alice, bob, carol"
$ git push
7. 禁止客户端shell登录
因为前面我们添加了客户端的ssh的公钥到远程服务器,所以客户端可以直接通过shell远程登录服务器,这不安全,也不是我们想要的。且看下面如何禁用shell登录:
$ vim /etc/passwd
# 可以通过 vim的正则搜索快速定位到这行, 命名模式下 :/git:x
# 找到这句, 注意1000可能是别的数字
git:x:1000:1000::/home/git:/bin/bash
# 改为:
git:x:1000:1000::/home/git:/bin/git-shell