创建局域网Git服务器

本文提供的方法适用于小型团队在局域网内通过git协同编码,基本配置简便易行,还额外提供基于SSH免密码提交代码的扩展方案。基本原理可参见文末总结。

一. 基本步骤

第1步:安装 Linux,安装 Git

此处省略具体操作步骤。

第2步:创建 git 用户

在Linux系统内以管理员权限(root)执行如下命令创建Linux用户:

adduser git

此命令执行过程中会提示输入新用户的 登录密码,同时自动创建用户主目录/home/git,以及执行其他必要的工作。

该用户不一定非叫git,任意合法名称都行,例如 liigogit 等等,当然后续操作命令也要相应地修改,最终仓库地址也有所不同(仓库地址以此用户名开头)。

网上有方法禁止git用户登录SSH。我认为这一步是可选的。

第3步:创建 git 仓库

使用 git 用户登录Linux系统,在用户主目录 /home/git 内执行如下命令创建git仓库:

git init --bare myrepo.git

裸仓库(–bare)目录名称以后缀 .git 结尾是一种习惯性约定,并非必需。

该仓库本地目录是 /home/git/myrepo.git,或者 ~/myrepo.git,这个毫无疑问。

该仓库 远程目录 可以是以下任意一个:

咱们通常使用最后一个,因为它最简洁。

注意其中包含了用户名、IP地址、本地目录等信息;注意符号 @: 都是必不可少的。

第4步:客户端克隆 git 仓库

Git客户端可通过如下命令克隆仓库:

git clone [email protected]:myrepo.git

用户名git已经包含在仓库远程目录内,用户密码就是在第2步创建git用户时设定的那个密码。克隆仓库需要输入密码。

第5步:客户端推送 git 仓库

执行 git push 等命令时要求输入密码,就是第2步创建git用户时设定的那个密码。

至此,基本配置步骤已经完成,基础功能可用。如需免密码推送Git功能,请继续阅读本文。

二. 配置SSH公钥免密码推送Git

经过以上5个步骤,Git服务器基本功能已经可用,但是至少还有两个缺点:

  • 需要向团队所有成员公开git用户的密码,不太安全
  • 每次推送仓库时都要输入git用户的密码,操作繁琐

下面为Linux系统的 git 用户配置 authorized_keys 文件,配置成功之后就无需公开其登录密码,推送时也无需输入密码,一并克服了两个缺点。

服务端配置文件 authorized_keys

使用 git 用户登录Linux,在其主目录 /home/git 内执行如下操作(无需管理员权限):

mkdir .ssh
chmod 700 .ssh
cd .ssh
touch authorized_keys
chmod 600 authorized_keys

LIIGO人云亦云注:SSH系统要求 .ssh 目录权限是700(drwx------),.ssh/authorized_keys 文件权限是600(-rw-------)。

然后编辑该文件 /home/git/.ssh/authorized_keys ,逐行输入团队各成员提供的公钥文件内容(下文介绍生成SSH公钥私钥的方法)。

客户端生成SSH公钥密钥

Linux用户

Linux登录用户在任意目录下执行命令 ssh-keygen 连续按三次回车键即自动生成如下两个文件:

  • ~/.ssh/id_rsa
  • ~/.ssh/id_rsa.pub

其中 id_rsa 就是刚创建的密钥文件(此文件名和路径不得随意变动),id_rsa.pub 是公钥文件。

团队各成员分别将自己的公钥文件 id_rsa.pub 或其内容发给git用户管理员,让他写入服务端 authorized_keys 文件。

TortoiseGit 用户

Tortoise Git 用户可通过 PuTTYgen.exe 创建公钥密钥。具体方法是点击Generate按钮,随意滑动鼠标直至创建完成,生成的公钥文本显示在窗口上方多行只读编辑框内,复制其内容发送给git用户管理员,让他写入服务端 authorized_keys 文件。最后还要点击 Save private key 按钮保存密钥文件(*.ppk,Putty密钥文件,区别于OpenSSH密钥文件(id_rsa),但利用PuTTYgen.exe,前者可以导出后者)。还有一点要特别注意,通过 Tortoise Git 图形界面克隆仓库时需勾选"Load Putty key",并选定前面生成的Putty密钥文件(*.ppk)。至于Pageant.exe,不用管他,Tortoise Git会自动启动它并自动加载Putty密钥文件。

LIIGO多说一句,对于Github上的仓库,要应用公钥密钥,通过TortoiseGit克隆仓库时必须使用SSH地址(形如[email protected]:liigo/rust.git),而非HTTPS地址(形如https://github.com/liigo/rust.git)。Github网站仓库首页同时提供这两类链接(“Clone with SSH” VS “Clone with HTTPS”)。

三. 总结

服务器是开启了SSH服务的Linux系统,在其中创建名称为 git 的Linux用户(同时也是SSH登录用户)专用于管理Git仓库,仓库位于服务器本机目录 /home/git/name.git 内,仓库SSH地址即客户端克隆地址是 git@ip:name.git,Git克隆命令行是 git clone git@ip:name.git

在未配置SSH公钥的情况下,需要向仓库使用者公开 git 用户的登录密码,克隆(clone)/拉取(pull)/推送(push)等操作都需要输入该密码。在服务端配置好文件 /home/git/.ssh/authorized_keys 并录入各使用者SSH公钥后,就无需公开该登录密码,所有Git操作都不用输入密码。

前面的基本操作步骤都很简单,可以提供基本的Git服务;配置SSH公钥的操作相对复杂,但客户使用体验更好。

此方法的缺点是,不能有针对性的分别设置团队各成员的权限,所有人都能完全操控Git仓库。

可能有朋友产生疑问,团队所有成员共用一个git用户提交代码,还能分清代码是谁写的吗?当然能。Git客户端推送时携带了代码作者的姓名和邮件地址,都完整的体现在 git log 里面,这个无需担心。Github网站后端也是如此操作的,并无不妥。

发布了275 篇原创文章 · 获赞 442 · 访问量 244万+

猜你喜欢

转载自blog.csdn.net/liigo/article/details/83790604