1、环境准备
服务器端:CentOS 7.7 + git (version 1.8.3.1)
客户端:Windows10 + git (version 2.27.0.windows.1)
由于CentOS已经内置了OpenSSH
,如果您的系统没有,请自行安装
$ ssh -V
# 输出以下表示OpenSSH已安装,可能版本不同,能用即可。
<output> OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
2、安装Git
Linux 做为服务器端系统,Windows 作为客户端系统,分别安装 Git。
①服务器端:
$ yum install -y git
# 安装完后,查看 Git 版本
$ git --version
<output> git version 1.8.3.1
②客户端:
Git官网下载地址:Git官网
Git 2.27.0 64位百度网盘地址:提取码:2iyq
安装完之后,查看 Git 版本
$ git --version
<output> git version 2.27.0.windows.1
3、服务器端建立git 用户组与git用户
- 创建用户组gitGrp:
$ groupadd gitGrp
- 创建用户admin:
$ useradd admin
- 给用户admin设置密码
$ passwd admin
4. 给用户admin分配到gitGrp组
$ usermod -g gitGrp admin
5、服务器端创建 Git 仓库
设置 git/gittest.git 为 Git 仓库
然后把 Git 仓库的 owner 修改为 admin
$ mkdir -p ./git/gittest.git
# 使用git init --bare可以创建一个裸仓库,并且这个仓库是可以被正常clone和push的
$ git init --bare git/gittest.git/
<output> Initialized empty Git repository in /home/admin/git/gittest.git/
$ cd git/
$ chown -R admin:gitGrp gittest.git/
6、客户端 clone 远程仓库
从 Linux Git 服务器上 clone 项目:
$ git clone admin@42.xxx.xxx.163:/home/admin/git/gittest.git
如果SSH用的不是默认的22端口,则需要使用以下的命令(假设SSH端口号是8000):
$ git clone admin@42.xxx.xxx.163:8000/home/admin/git/gittest.git
当第一次连接到目标 Git 服务器时会得到一个提示:
The authenticity of host '42.xxx.xxx.163 (42.xxx.xxx.163)' can't be established.
ECDSA key fingerprint is SHA256:KyTFSG6QYzVbsJX2F2Vr1YZAIvs11sDlmH0upuIiRt0.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入 yes:
Warning: Permanently added '42.xxx.xxx.163' (ECDSA) to the list of known hosts.
此时 C:\Users\用户名\.ssh 下会多出一个文件 known_hosts,以后在这台电脑上再次连接目标 Git 服务器时不会再提示上面的语句。
后面提示要输入密码,可以采用 SSH 公钥来进行验证。
7、客户端创建 SSH 公钥和私钥
$ ssh-keygen -t rsa -C "your content"
此时 C:\Users\用户名\.ssh 下会多出两个文件 id_rsa 和 id_rsa.pub
id_rsa 是私钥
id_rsa.pub 是公钥
公钥加密,私钥解密
8、服务器端 Git 打开 RSA 认证
进入 /etc/ssh 目录,编辑 sshd_config,打开以下三个配置的注释:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
保存并重启 sshd 服务:
$ systemctl restart sshd.service
由 AuthorizedKeysFile 得知公钥的存放路径是 .ssh/authorized_keys,实际上是 $Home/.ssh/authorized_keys,由于管理 Git 服务的用户是 admin,所以实际存放公钥的路径是 /home/admin/.ssh/authorized_keys
在 /home/admin/ 下创建目录 .ssh
$ mkdir .ssh
然后把 .ssh 文件夹的 owner 修改为 admin
$ chown -R admin:gitGrp .ssh
9、将客户端公钥导入服务器端 /home/admin/.ssh/authorized_keys 文件
$ ssh admin@42.xxx.xxx.163 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
重要:
修改 .ssh 目录的权限为 700
修改 .ssh/authorized_keys 文件的权限为 600
$ chmod 700 .ssh
$ cd .ssh/
$ chmod 600 authorized_keys
客户端再次 clone 远程仓库
$ git clone admin@42.xxx.xxx.163:/home/admin/git/gittest.git
10、禁止 git 用户 ssh 登录服务器
之前在服务器端创建的 git 用户不允许 ssh 登录服务器
编辑 /etc/passwd
找到:
admin:x:1000:1000::/home/admin:/bin/bash
修改为:
admin:x:1000:1000::/home/admin:/bin/bgit-shell
此时 git 用户可以正常通过 ssh 使用 git,但无法通过 ssh 登录系统。