Linux 下 Git 服务器搭建
Github 只对开源的项目免费,非开源项目必须付费。为了不付费,也为了代码安全,我们需要搭建自己的 Git 服务器,而且国内访问速度更快。Git 的远程仓库和本地仓库没有本质区别,远程仓库只是保证永远在运行。
作者:王克锋
出处:https://kefeng.wang/2018/01/20/git-server/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。
1.免费的 Git 托管平台
1.1 GitHub
收费模式:对开源免费托管,对非开源要收费。
开源项目的首选。
1.2 Gitlab
维基百科: https://zh.wikipedia.org/wiki/Gitlab
GitLab是一个基于 Web 的 Git 仓库管理工具,且具有 wiki 和 issue 跟踪功能。GitLab 由 GitLab Inc. 开发,使用开源许可证。
GitLab 由乌克兰程序员 Dmitriy Zaporozhets 和 Valery Sizov 开发。它由 Ruby/Go 写成。
GitLab被 IBM,Sony,NASA,Alibaba,Invincea,SpaceX 等组织使用。
1.3 国内托管平台
2 安装服务器
2.1 访问原理【重要】
客户端访问 git@centos:/home/git/repo/project.git
时,内部原理是:
- 通过 ssh 协议,以用户 git(@前面的内容) 连接主机 centos,相当于命令
ssh git@centos
; - 然后访问目录
/home/git/repo/project.git
2.2 安装 openssh-server
由于是通过 ssh 访问,所以服务器上必须安装并启用 ssh 服务。
1 | sudo yum -y install openssh-server |
2.2 安装 Git
1 | sudo yum -y install git |
2.3 创建 Git 用户
1 | sudo adduser git |
2.4 建立仓库
1 | mkdir /home/git/repo ## 仓库总目录 |
3 公钥认证方式
初始情况下,没有配置公钥认证,是以明文密码方式登录。
3.1 准备密钥对(只需操作一次)
如果尚无密钥对(私钥文件 id_rsa,公钥文件 id_rsa.pub),则手工生成:1
2
3
4## 其中 -P(Passphrase) 和 -f(Output file) 都必须指定,否则会要求输入。
mkdir %USERPROFILE%\.ssh
"C:\Program Files\Git\usr\bin\ssh-keygen.exe" -t rsa -C "test@gmail.com" -P "" -f %USERPROFILE%\.ssh\id_rsa
## 会在目录 %USERPROFILE%\.ssh 下生成公钥/私钥文件 id_rsa/id_rsa.pub
3.2 禁止公钥之外的所有认证方式(只需操作一次)
1 | ## sudo vim /etc/ssh/sshd_config |
修改并保存文件后,重启服务以生效 sudo service sshd restart
。
3.3 服务端配置公钥(涉及的用户逐一配置)
要登录哪个用户(git 或 root),就要把信任的客户端的公钥内容(id_rsa.pub),追加至该用户目录下文件 .ssh/authorized_keys
中。1
2
3
4
5mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh
touch $HOME/.ssh/authorized_keys
chmod 600 $HOME/.ssh/authorized_keys
cat id_rsa.pub >> $HOME/.ssh/authorized_keys
3.4 客户端配置公钥(git/ssh)
这里所说的 ssh,包括 Linux 下的 ssh,也包括 Windows 下的 C:\Program Files\Git\usr\bin\ssh.exe
把前面准备好的【私钥文件】id_rsa,复制至文件 %USERPROFILE%\.ssh\id_rsa
如果在 TortoiseGit 中 pull/push 操作时报错 No supported authentication methods available
则调整其设置(TortoiseGit / Settings / Network) SSH client 的值,
原值 C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
新值 C:\Program Files\Git\usr\bin\ssh.exe
3.5 客户端配置公钥(SecureCRT)
菜单:选项 / 全局选项 / SSH2,指定【公钥文件】 %USERPROFILE%\.ssh\id_rsa.pub
菜单:选项 / 全局选项 / SSH 主机密钥,维护已有密钥
4 客户端克隆
参考文章 Git 客户端的安装与使用
客户端执行克隆命令 git clone git@centos:/home/git/repo/project.git
时,会有以下两步:
4.1 确认是否连接指定主机
如果尚未连接过此主机,会询问是否确认连接;
确认连接时会把该主机的“域名、地址、指纹”列入文件 %USERPROFILE%\.ssh\known_hosts
1
2
3
4
5The authenticity of host 'centos (192.168.126.128)' can't be established.
ECDSA key fingerprint is SHA256:csmkULq5gk7O2SlNSkSwnAq2YMMDOWElv52tiiCx/t0.
Are you sure you want to continue connecting (yes/no)? yes
### 输入 yes,会显示下面消息:
Warning: Permanently added 'centos,192.168.126.128' (ECDSA) to the list of known hosts.
4.2 用户认证
- 如果没有配置公钥认证方式,则要求登录用户 git@centos 的密码;
- 如果配置了公钥认证方式,则通过公钥检查匹配,无需输入密码。
4.3 执行 Git 操作
用户认证通过后,执行 Git 操作,比如克隆。