git 简介
Git 是当前最流行的分布式版本控制系统,SVN 是集中式版本控制系统,两者的区别可以看廖雪峰的集中式 vs 分布式,目前流行的开源的网站github和码云_Git_ee都是用 git 来做版本控制的,但是都是开源的,私有的需要付费,所以尝试在 centos 搭建自己的 git 服务
git 的安装配置
$ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel$ yum install git
其他 linux 版本系统安装的安装地址
创建 git 用户和密码
以下创建用户和密码都是git
useradd gitpasswd git
useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在
/etc/passwd
文本文件中。
创建 git 仓库
在相应的目录下创建 git 仓库
sudo git init --bare /home/gitfolder.git
对 git init 命令添加 --bare 参数就表示初始化 Git 仓库的时候不要创建本地工作目录,所以相当于.git 文件夹下的所有内容直接创建到当前目录下,而不是被放到.git 目录下。
clone 代码
在 pc 端克隆服务器的代码
git clone git@111.22.33.44:/home/gitfolder.git
这里的git@111.22.33.44前面的git
代表的是 useradd 的用户名
输入上面配置的 git 密码(此时密码是 git)显示如下信息
warning: You appear to have cloned an empty repository.
通过上面的步骤就可以搭建起 git 服务,接下来在工作目录新增一个文件提交,发现报错insufficient permission for adding an object to repository database
是因为 git 用户对这个文件夹没有权限操作,所以把当前的 gitfoler.git 仓库权限赋给 git 用户,所以需要在服务端执行以下命令
sudo chown -R git:git /home/gitfolder.git
chown 命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户 D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。只有文件主和超级用户才可以便用该命令。
至此 git 服务器就算搭建成功了,不过有一个缺点,每次 clone 或者 push 都需要输入密码,可以使用把客户端的公钥给放到服务器上即可实现免密通信
生成 SSH 公钥
由于 git 服务器可以使用 SSH 公钥进行认证,可以在客户端需要生成私钥和公钥,然后把公钥放到 git 服务器的authorized_keys
文件即可,首先在 windows 命令行下执行
ssh-keygen -t rsa -C "340443366@qq.com"
一路回车,就会在C:\Users\kelen\.ssh
目录下生成对应的私钥和公钥,将.ssh 文件夹里面的id_rsa.pub
里面的内容追加到服务器的~/.ssh/authorized_keys
文件里,做法是把本地的id_rsa.pub
拷贝到authorized_keys
相同目录下,输入命令
cat id_rsa.pub >> authorized_keys
然后重启服务
$ systemctl restart sshd.service // restart ssh service
到这一步发现每次 push 代码还是需要输入密码,发现原因还是没有对 git 用户赋予 authorized_keys 权限,需要在服务器切换 git 用户来操作
$ su git
创建.ssh 文件夹和相应权限
$ mkdir ~/.ssh && chmod 700 ~/.ssh
新增 authorized_keys 和相应的权限
$ touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys
打开 RSA 认证
在服务端的文件/etc/ssh/sshd_config
打开 RSA 认证,找到下面对应的选项,取消注释
RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys
禁用 shell 登录
出于安全考虑,第二步创建的 git 用户不允许登录 shell,这可以通过编辑/etc/passwd 文件完成。找到类似下面的一行
git:x:1001:1001:,,,:/home/git:/bin/bashgit:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git 用户可以正常通过 ssh 使用 git,但无法登录 shell,因为我们为 git 用户指定的 git-shell 每次一登录就自动退出