搭建 git server

前言

这里主要描述自建 git 服务器时采用 ssh 协议的情况。对 gitlabJenkins 平台刚兴趣的可以查看

SSH协议

SSH协议是常见的安全传输协议之一,采用非对称加密的原理,协议效率很高,数据传输前会被尽可能地压缩。
缺点是没办法匿名访问,大型开源项目并不倾向于采用SSH,因为要想通过SSH访问仓库,用户必须首先有服务器的SSH访问权限,这个对于公钥的维护而言成本太高。像 github 就需要用户先上传自己的 SSH 公钥才能进行SSH的相关操作。

搭建流程

对于仓库导出以及建立SSH连接没有顺序要求,这里先建立SSH连接。
本地协议的话:git clone /path/to/git/repository/xxx.git

建立SSH访问权限

git 服务器搭建中最复杂的就是用户权限管理,比如允许部分人拥有只读权限,另一部分人拥有完整的读写权限。

  • 如果团队在 git 服务器上都有一个账号。使用 chmod 给 git 仓配置相应的权限即可。
  • 如果团队不都在 git 服务器上拥有账号 。推荐使用这种方法,git 服务器本身就不该开放给所有人登录。
    可以创建一个叫 git 的用户,然后将拥有写权限的用户的SSH公钥加入 ~/.ssh/authorized_keys 中。这样大家其实是使用这个 git 用户来访问 git 服务器,使用SSH公钥登录,也解除了每次SSH登录都需要输入密码的痛苦了
添加 git 用户
sudo adduser git
su git -l
cd
mkdir .ssh & chmod 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
生成个人和 git 服务器 SSH 密钥对
client:
	ssh-keygen -t rsa -C "your_email"
git server:
	ssh-keygen

client 拷贝/发送自己的公钥给 git server
以下指令是拥有 git 用户的密码情况下使用
scp ~/.ssh/xxx.pub git@server_ip:/home/git/
如果没法登录到 git 服务器,client 也可以通过邮件发送公钥给 git server 管理员,请求添加即可。
创建 git 仓库
已有代码仓库部署

把现有 git 仓库导出成一个新的裸仓库(不含有工作目录,可以大体上认为就是 .git),然后部署到 git 服务器上。
部署的目录可以自己指定。

git clone --bare ~/xx/project_name project_name.git
scp -r project_name.git git@server_ip:/home/svr/git/

这样一来, git 仓库的数据就拷贝到 git 服务器上 git 用户目录下的 svr/git 文件夹下了
全新的代码仓库部署

直接在 git 服务器上建立一个裸仓库。

使用 git 用户登录到 git 服务器上
cd ~/svr/git/my_project.git
git init --bare
访问 git 服务器

拥有权限访问 git 服务器的用户已经在authorized_keys里,远程仓库也已经建立好。使用如下命令可访问 git 服务器。

git clone git@server_ip:/home/git/svr/git/project.git

clone 默认会添加到 origin,也可以手动添加到远程地址上方便访问
git remote add origin xxx
限制shell访问

上面的配置完后所有加入authorized_keys里的用户都能够使用 git 用户登录到 git 服务器上。可以在etc/passwd文件更改shell有关的内容,也可以使用git-shell来限制 git 用户只能进行git相关的操作。方法就是让 git 用户登录时使用的shell为git-shell。如此一来就不具备普通shell的访问权限了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值