搭建 git 服务器
安装Git
1 | yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel |
创建一个git用户组和用户,用来运行git服务:
1 | groupadd git |
创建证书登录
收集所有需要登录的用户的公钥,公钥位于 id_rsa.pub
文件中,把我们的公钥导入到 /home/git/.ssh/authorized_keys
文件里,一行一个。
如果没有该文件创建它:
1 | cd /home/git/ |
在 /home/git/.ssh/authorized_keys 文件中添加 id_rsa.pub d的内容即可。
- windows : C:\Users\
.ssh\id_rsa.pub - linux : /root/.ssh/id_rsa.pub
如果没有,则使用 ssh-keygen -t rsa -C “cakipaul@gmail.com“。注意要先 su git 切换到 git 用户。
也可以命令行直接导入证书:
1 | cd C:\Users\用户ssh git@git.cakipaul.com 'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub |
Git 服务器打开 rsa 认证
打开配置文件:
1 | vim /etc/ssh/sshd_config |
将三个配置项置为 yes:
1 | RSAAuthentication yes |
重启sshd:
1 | systemctl stop sshd.service |
初始化Git仓库
首先我们选定一个目录作为Git仓库,假定是 /home/gitrepo/blog.git
:
1 | cd /home |
以上命令Git创建一个空仓库,服务器上的Git仓库通常都以.git结尾。然后,把仓库所属用户改为git:
1 | chown -R git:git blog.git |
push 仓库到服务器
1 | git remote add cvm git@git.cakipaul.com:/home/gitrepo/blog.git |
配置 hooks
需求:在 pc 上 push 更新到服务器,服务器将更新自动部署到网站。
1 | cd /home |
hook 参考正文:
1 |
|
配置执行权限:
1 | chmod +x /home/gitrepo/blog.git/hooks/post-receive |
后续问题
禁止git用户ssh登录
1 | vim /etc/passwd |
将 git:x:1004:1005::/home/git:/bin/bash 改为 git:x:1004:1005::/home/git:/bin/git-shellgit
每次仍需要密码登录
查看安全日志:
1 | cat /var/log/secure|grep git |
发现:Authentication refused: bad ownership or modes for directory /home/git
修正权限:
1 | chmod 700 /home/git |
(权限千万不能赋予777,否则免密登录是无法生效的,因为authorized_keys默认是自己唯一写权限的)
另外如果日志中出现 user git not allowed beecause account is locked ,则需要解锁一下密码:
1 | sudo passwd -u git |
报错:remote: error: cannot run hooks/post-receive: No such file or directory
如果文件存在且已授权,则原因是文件编码应使用 LF换行,而不是 CRLF。在 linux 下直接 touch 生成即可。