在 Linux 上搭建私有 Git 服务器 — 22 端口版
为了防止我的代码被喂给 AI,我决定把我之前写的所有代码都转移到自己的服务器上,并且以后的代码也不再在 GitHub 上托管。所以我最近学习了一下如何在云服务器搭建 Git 服务器,总的来说还算简单,毕竟我也不需要那些复杂的 Web 用户界面,只需简单的存储代码就行。我原本打算用社区版的 GitLab 作为我的私库托管软件,但是它会安装一些乱七八糟的第三方库,之后我还得重新配置麻烦的要死的 Nginx,更重要的是它和那些第三方库同样不能保证不在后台搞小动作,于是我索性就直接舍弃掉所有的第三方托管软件,只用 Git 自带的功能就足够了。
一、生成本地客户端的公钥和私钥(TortoiseGit)
由于 TortoiseGit 使用的 SSH 客户端是 TortoiseGitPlink,并不是 Git 所使用的 OpenSSH 客户端,所以需要借助 TortoiseGit 提供的工具PuTTYgen
来生成公钥和私钥。
1、首先打开 PuTTYgen。
2、选择RSA
,然后点击Generate
生成 RSA 公钥和私钥。
注意,点击生成按钮后,要用鼠标在如图指定区域移动,生成的进度才会前进。
3、生成完后复制公钥到记事本中备用。
4、点击“Save private key”按钮,保存私钥文件到一个固定的不经常变动的文件夹中,以备后面使用。
二、远程服务器操作
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
文件结尾并保存。
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、克隆上面创建的私有仓库。
2、在克隆对话框中,选择“Load Putty Key”,然后选择前面保存的私钥文件。
注意,这一步很关键,它将直接决定每次是否可以免密进行 Git 相关操作。
3、一切顺利的话,就会克隆成功。第一次登录时仍旧需要输入密码,第二次就不会了。如果第二次还要求输入密码,请检查公钥是否配置正确。
4、新建一个文件,然后提交更改,看看是否成功。如果不成功,则最好把服务器上新建的用户删掉重新配置一遍。