Centos中简易Git服务器搭建
对于微小型的开发团队,可直接使用git工具进行代码仓库的管理。以下操作在Centos系统下进行。
- 操作系统:
CentOS 8.0 64位
1 Git 安装
首先安装git工具,可参考 阿里云ECS(Centos)中Git工具安装及配置。命令如下(建议在root用户下进行):
# 安装git
yum install -y git
# 查看git版本
git --version
2 Git账户
为便于管理,创建专用于git仓库的系统账户,存储仓库的源代码。
2.1 创建git账户
详细的用户相关操作可参考 https://blog.csdn.net/lxh_worldpeace/article/details/106933143。命令如下:
# 创建git用户
adduser git
# 修改密码,两次确认密码
passwd crane
# 创建用户成功 可在/home目录下看到该用户的文件夹
ls /home
注:密码长度小于8可能会有错误提示,如果确定用端密码可忽略该提示,只要两次输入密码相同即可,如下图
完成上面步骤后,有git账户的密码可通过远程shell登录,如下。但是这样并不安全,所以应该远程登录操作应该禁止。
2.2 禁用远程登录git账户
2.2.1 创建git-shell-commands目录
在git用户目录/home/git
下面创建git-shell-commands
目录,可使用git账户进行操作,命令如下:
# 切换到git账户
su git
# 进入到git主目录
cd
# 查看当前目录
pwd
# 创建目录git-shell-commands
mkdir git-shell-commands
此文件夹是git-shell用到的目录,需要我们手动创建,不然报错:fatal: Interactive git shell is not enabled. hint: ~/git-shell-commands should exist and have read and execute access.
2.2.2 修改git账户默认shell
在系统安装完git工具之后,会在/usr/bin/git-shell
目录增加一个git-shell
可执行文件,用于git操作。首先确保在当前系统的可用shell列表中包含该git-shell工具,如下图,查看/etc/shells
文件中是否有git-shell
工具,如果没有就添加进去(注意是完整路径)。
完成上面操作后,有以下两种方式修改当前系统默认shell工具。
2.2.2.1 修改文件
修改文件/etc/passwd
中git:x:1001:1001::/home/git:/bin/bash
中的bash
为git-shell
。
文件中的
1001
和bash
也可能是别的内容
2.2.2.2 命令方式
# 修改git用户的默认shell工具
chsh git -s /usr/bin/git-shell
2.2.3 禁用shell登录
通过上面操作,还可以进行shell登录,只不过登录成功后会进入git-shell命令行,但是什么都不能做,只能执行exit
退出命令。如下图:
要完全禁止shell登录,可以在git-shell-commands
目录下创建no-interactive-login
文件,是远程shell登录后输出一些提示信息,然后退出登录。文件内容如下:
#!/bin/sh
printf '%s\n'
printf '%s\n' ">> Hi $USER! You've successfully authenticated, but I do not provide interactive shell access."
printf '%s\n'
exit 128
注意:不要忘了给no-interactive-login文件添加可执行权限(命令:chmod +x no-interactive-login)
然后再通过shell登录git账户,会输出响应提示信息,如下图:
由于git账户已经禁用shell登录,所以登录其他账户之后也无法切换到git账户。
3 服务端仓库管理
3.1 创建仓库
由于git账户已禁用shell登录,可以使用管理员账户或者root,在git账户的目录下建立仓库,使用root账户操作命令如下:
# 进入到git用户目录下创建demo文件夹,用作仓库文件管理
mkdir demo
# 进入demo目录,初始化git仓库,执行完成后可查看到git相关文件,如下图
git init --bare
3.2 切换仓库文件所属用户
从上面图中可以看到,demo文件夹及目录下的文件都属于root账户,所以如果要使用git账户的权限进行访问要将文件夹属改为git账户。
在git账户目录下执行如下命令:
chown -R git demo
再次查看demo及子目录下文件,如下图,已属于git账户:
4 客户端仓库操作
完成上面的操作,服务端已经建立好了仓库,可在客户端进行仓库的克隆、拉取、提交等操作。
4.1 克隆仓库
在某个目录下,拉取上面建立的demo
仓库。根据机器配置,上面仓库的地址为:
git@lxh.space:/home/git/demo
执行结果如下:
git clone git@lxh.space:/home/git/demo
4.2 创建文件并提交
服务端创建好仓库后,在客户端的操作与操作像github、gitee等托管平台的仓库一样,大致命令如下;
# 创建一个文件
touch readme.md
# 将文件加入到提交缓冲区
git add .
# 提交到本地,并设置提交信息
git commit -m 'readme'
# 推送到服务端仓库 gp为git push缩写
gp
# 查看仓库状态
git status
注:上图中的错误是
demo
仓库使用root
账户创建后还没有将属主身份转移给git
账户的情况,切换demo
仓库的属主为git
后错误解除
5 客户端操作仓库免登录
上面步骤中,每一步和服务端的操作都需要输入git账户的密码,非常繁琐。可以将客户端的ssh公钥放到服务端的git账户授权文件中,这样每次操作就不需要再输入密码了,有以下两种方式:
5.1 复制文件内容
一般情况下,客户端本机的ssh公钥存放在用户目录下的.ssh
目录中的id_rsa.pub
文件中,可将此文件内容复制追加到服务端git
账户目录下的.ssh/authorized_keys
文件中即可。
5.2 命令方式
可使用ssh-copy-id
登录一次git
账户即可,详细见<<Linux ssh免密登录设置>>,如下图。
# 执行以下命令输入密码即可
ssh-copy-id git@lxh.space
注意:这种方式需要在
git
账户没有禁用shell登录前进行,如果禁用了shell登录则无法成功执行此命令。禁用shell登录后可将账户先切换回其他shell,执行完ssh-copy-id
命令后再换回git-shell即可,如下图:
如下图,将本机ssh公钥提交到服务端后便操作仓库便不再需要密码:
转载:https://blog.csdn.net/lxh_worldpeace/article/details/108519002