centos搭建私有git库
1. 服务器环境搭建
1.1 安装git
|
|
1.2 创建blog用户用于git
|
|
找到以下内容
|
|
添加一行
blog ALL=(ALL) ALL
保存退出后将sudoers改回权限
|
|
设置blog用户密码
|
|
按照提示输入两次相同的密码即可
1.3 Git服务器打开RSA认证
在Git服务器上首先需要将/etc/ssh/sshd_config中将RSA认证打开,即:
|
|
|
|
添加两行配置彻底去掉核对公钥提示:
|
|
重启sshd服务
|
|
这里我们可以看到公钥存放在.ssh/authorized_keys文件中。所以我们在/home/blog下创建.ssh目录,并创建authorized_keys文件 切换到/home/blog文件夹,创建.ssh文件夹和.ssh/authorized_keys文件
|
|
1.4 SSh Key 设置
按下列步骤在电脑上生成公钥文件id_rsa.pub 在电脑上打开Xshell,点击菜单栏中的"tools",选择“User Key Generation Wizard…”(新建用户密钥生成向导), 弹出“弹出用户密钥生成向导”对话框,在“密钥类型”项选择“RSA”公钥加密算法,“密钥长度”选择为“2048”位密钥长度,(默认就行) 继续下一步,在“密钥名称”中输入Key的文件名称,这里可设置为“id_rsa”, 在“密码”处输入一个密码用于加密私钥,并再次输入密码确认,(会有一个默认的密钥名称,可修改), 点击“下一步”,密钥生成完毕(公钥格式选择SSH2-OpenSSH格式),这里显示的是公钥, 我们可以复制公钥然后再保存,也可以直接保存公钥到文件,这里保存为"id_rsa.pub"文件, 私钥这里不显示,可以在“用户密钥管理…”导出到文件:一般存在电脑的文档文件夹 将客户端上的公钥文件id_rsa.pub里的内容复制到服务器上的authorized_keys文件中
公钥和私钥文件权限设置 SSH对公钥、私钥的权限和所有权的要求是非常严格的,总结如下: 1.下列目录或文件的所有权必须是blog,所属组也应该是blog /home/blog /home/blog/.ssh /home/blog/.ssh/id_rsa /home/blog/.ssh/authorized_keys
|
|
2.服务器下面文件的权限 /home/blog/.ssh/authorized_keys (644,600) /home/blog/.ssh/id_rsa(600) /home/blog/.ssh (700)
|
|
1.5 禁用git用户的shell登陆
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。
|
|
找到类似下面的一行: blog❌1001:1001::/home/blog:/bin/bash 最后一个冒号后改为: blog❌1001:1001::/home/blog:/usr/bin/git-shell 这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。 还要复制一个名为git-shell-commands的目录,避免git shell 报错:
|
|
1.6 测试
若客户端.ssh文件夹下没有known_hosts文件,执行下列命令获取
|
|
执行ssh 命令测试是否可以免密登录
|
|
若连接成功,则表示git环境已经搭建完成 若连接失败,则需要找到具体原因修复
2. 服务器环境搭建私有git仓库
创建一个裸仓库,裸仓库就是只保存git信息的Repository 一定要加 –bare,这样才是一个裸库。
|
|
使用 git-hooks 同步网站根目录/path/to/www 使用的是 post-receive这个钩子,当git有收发的时候就会调用这个钩子。 在 /home/blog/blog.git 裸库的 hooks文件夹中,新建post-receive文件。
|
|
在文件中输入以下信息
|
|
赋予post-receive执行权限
|
|
确保git用户blog拥有仓库所有权以及目标文件夹所有权
|
|
执行git clone 命令测试是否可以clnoe
|
|
3.客户端环境建立git库及同步
第一次使用git需要配置
|
|
客户端建立git库,并且添加远程仓库
|
|
git remote add <分支名> <远程地址> //上面的blog 就是分支,这个可以随便自定义 如果git remote add 加错了,可以使用 git remote rm <分支名> 来删掉:
|
|
若push时发生文件冲突,可先将远程文件拉下来,再push
|
|
或者强制更新
|
|
如果服务器上已经有项目,快速git到本地
|
|