在 Linux 上搭建私有 Git 服务器  — 22 端口版

为了防止我的代码被喂给 AI,我决定把我之前写的所有代码都转移到自己的服务器上,并且以后的代码也不再在 GitHub 上托管。所以我最近学习了一下如何在云服务器搭建 Git 服务器,总的来说还算简单,毕竟我也不需要那些复杂的 Web 用户界面,只需简单的存储代码就行。我原本打算用社区版的 GitLab 作为我的私库托管软件,但是它会安装一些乱七八糟的第三方库,之后我还得重新配置麻烦的要死的 Nginx,更重要的是它和那些第三方库同样不能保证不在后台搞小动作,于是我索性就直接舍弃掉所有的第三方托管软件,只用 Git 自带的功能就足够了。

一、生成本地客户端的公钥和私钥(TortoiseGit)

由于 TortoiseGit 使用的 SSH 客户端是 TortoiseGitPlink,并不是 Git 所使用的 OpenSSH 客户端,所以需要借助 TortoiseGit 提供的工具PuTTYgen来生成公钥和私钥。

1、首先打开 PuTTYgen。

create personal private git repository on linux 01
图 1

2、选择RSA,然后点击Generate生成 RSA 公钥和私钥。

create personal private git repository on linux 02
图 2

注意,点击生成按钮后,要用鼠标在如图指定区域移动,生成的进度才会前进。

create personal private git repository on linux 03
图 3

3、生成完后复制公钥到记事本中备用。

create personal private git repository on linux 04
图 4

4、点击Save private key按钮,保存私钥文件到一个固定的不经常变动的文件夹中,以备后面使用。

create personal private git repository on linux 05
图 5
create personal private git repository on linux 06
图 6

二、远程服务器操作

1、登录远程服务器,创建用户并指定密码。

useradd sue
passwd sue

2、切换到新用户的主目录。

cd /home/sue

3、创建.ssh目录和authorized_keys文件。

mkdir -m 700 /home/sue/.ssh
cd /home/sue/.ssh
touch authorized_keys

其中.ssh/authorized_keys这个文件是用来存储 ssh 登录公钥的,更多说明可以参考 SSH 原理与运用(一):远程登录Authorized Keys File in SSH

4、将前面记事本中提前备好的公钥字符串追加到authorized_keys文件结尾并保存。

create private git server on linux 07
图 7

5、禁止新用户通过Bash Shell登录系统

usermod -s /usr/bin/git-shell sue

其中,git-shell是 Git 提供的一个受限制的 shell,用于限制用户只能执行 Git 相关的操作,而无法执行其他常规的 shell 命令或者登录到系统进行其它活动。如果不知道 git-shell 的路径,可以通过which git-shell进行查询。

6、创建一个私有的仓库。

cd /home/sue
sudo -u sue git init --bare myrepo

注意:在使用git init初始化仓库时一定要使用sudo -u指定 Git 用户,原因是因为当禁止 Git 用户使用 bash shell 登录后,就无法切换到 Git 用户去执行命令了,这时执行的命令默认就都是在别的用户(比如 root)下,相关的写权限也都是在别的用户下,Git 用户就没有写的权限了,这时候往仓库里面写文件就会报错:git remote unpack failed: unable to create temporary object directory

三、本地客户端操作(TortoiseGit)

1、克隆上面创建的私有仓库。

create personal private git repository on linux 08
图 8

2、在克隆对话框中,选择Load Putty Key,然后选择前面保存的私钥文件。

create personal private git repository on linux 09
图 9
create personal private git repository on linux 10
图 10

注意,这一步很关键,它将直接决定每次是否可以免密进行 Git 相关操作。

3、一切顺利的话,就会克隆成功。第一次登录时仍旧需要输入密码,第二次就不会了。如果第二次还要求输入密码,请检查公钥是否配置正确。

create personal private git repository on linux 11
图 11

4、新建一个文件,然后提交更改,看看是否成功。如果不成功,则最好把服务器上新建的用户删掉重新配置一遍。

create personal private git repository on linux 12
图 12