通过git在 CentOS Linux 服务器上搭建远程仓库

参考链接

  1. 搭建Git服务器
  2. 官方git-shell文档
  3. 4.4 服务器上的 Git - 配置服务器(最推荐)

1. 需求

  1. 可以通过外网对git服务器的仓库进行clonepullpush等操作,就像github一样,但不想要部署gitlab这种大型管理工具,因为它太耗费服务器资源。

2. 安装git

centos 用下面这个命令

yum install git

其他的可能是 pkg install gitapt install git

3. 创建一个git用户,来管理git服务

用户说明:

  1. git用户不能通过shell登录,只能通过shell访问git服务,不需要设置登录密码。
  2. git用户目录下的/home/git/.ssh/authorized_keys文件用于存放外部访问git仓库的ssh公钥

3.1 新增系统用户

# 新增一个用户
sudo adduser git

3.2 初始化.ssh目录

注意,需要通过su git切换用户,不然全程通过root用户来实现,需要额外通过chownchmod命令来改变目录文件的所属用户和权限。
我实际的应用场景是通过xshell工具,将windows机子上的user/.ssh/id_rsa.pub公钥内容复制到VMware虚拟机山的CentOS系统git用户目录的文件/home/git/.ssh/authorized_keys

# sudo权限用户无需密码切换为git用户
su git
# 跳转到git用户home目录
cd

# 初始化.ssh目录
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

# 将ssh公钥拷贝到authorized_keys
vim .ssh/authorized_keys

# 以上步骤可以通过ssh-copy-id命令快速完成。

初始化git的bare仓库(没有工作区的裸仓库)

# 跳转到git用户home目录
cd
# 创建repo目录统一管理git仓库
mkdir repo

# 初始化git仓库
cd repo/
mkdir project.git
cd project.git
git init --bare

防止ssh用户通过普通shell登录到服务器,改用git-shell

若要使用 git-shell,需要用它替换掉 bashcsh,使其成为该用户的登录 shell。 为进行上述操作,首先你必须确保 git-shell 的完整路径名已存在于 /etc/shells 文件中

cat /etc/shells  # see if git-shell is already in there. If not...
which git-shell   # make sure git-shell is installed on your system
sudo -e /etc/shells  # 这条命令实际上用vim编辑器打开了文件,将上一条命令输出的路径复制到文件末行,保存退出即可

现在你可以使用 chsh <username> -s <shell> 命令修改任一系统用户的 shell:

sudo chsh git -s $(which git-shell)

这条命令实际上就是修改/etc/passwd文件,可以通过vim编辑器手动修改

注意
/usr/local/git/bin/git-shell是作者实际的git安装目录下的,并没有安装在/bin/usr/bin中,请读者自行检查实际git-shell路径。
想知道为什么将bash改成git-shell,请参阅参考链接:官方git-shell文档

这样,用户 git 就只能利用 SSH 连接对 Git 仓库进行推送和拉取操作,而不能登录机器并取得普通 shell。 如果试图登录,你会发现尝试被拒绝,像这样:

$ ssh [email protected]
Last login: Thu Apr  8 18:57:36 2021
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 192.168.136.132 closed.

甚至sudo用户通过su git也无法登录

[root@jiewli ~]# su git
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

如何新建仓库

直接通过sudo权限用户在git用户目录下初始化仓库即可

# 用户自行约定统一存放所有仓库的目录
cd /home/git/repo/

mkdir <new_repository.git>

cd <new_repository.git>

git init --bare
# 外部机子,例如pc机上尝试clone新仓库
$ git clone git@<git_server_hostname>:/home/git/repo/<new_repository.git>
Cloning into '<new_repository>'...
warning: You appear to have cloned an empty repository.

如何增加用户ssh公钥

直接通过sudo权限用户在/home/git/.ssh/authorized_keys文件中编辑追加即可。

猜你喜欢

转载自blog.csdn.net/lijiewen2017/article/details/127603619