一、序言
公司长期使用SVN作为版本管理仓库,并且没有使用分支管理,在开发与发布时遇到了很多问题.后来配置了Jenkins自动化出版本,在开发与发布中需要进场切换版本. 综合考虑,最终决定在内网NAS上搭建一个Git远程仓库.
NAS是Linux内核的操作系统,所以需要一定Linux命令操作的基础.查阅大量资料并实践,最终整理成这一篇文章.
二、环境配置
- 群晖NAS (我们使用的非Plus版本,不支持docker安装GitLab,只能使用GitServer)
- NAS管理员权限
- SSH客户端,xshell或者putty
三、开始配置
- 安装GitServer
在群晖NAS的套件中心安装GitServer,这一步非常简单 - 创建一个共享目录用于存放Git仓库,并设置访问权限
- 创建仓库目录
- 创建一个用户群组,并设置访问权限
- 新建用户并加入git_group
- 在GitServer中添加用户访问权限
在NAS的主程序中打开GitServer,并添加刚刚创建的用户访问权限 - 打开用户账户中的家目录
打开家目录有两个作用 - 解决用户通过ssh访问的时候会提示目录不存在的问题
- 可以为用户配置SSH秘钥,实现免密登陆
- 开启SSH远程访问功能
走到这一步,NAS可以通过页面设置的部分都处理完成,接下来我们需要用过SSH远程连接NAS,通过命令来创建Git仓库
四、创建Git仓库
使用xshell/putty等工具连接NAS,需要用管理员账号登陆
sudo -i //切换管理员权限 cd cd /volume1/gittest //进入刚刚创建的共享目录中 mkdir res.git //创建仓库 cd res.git git init --bare //初始化git仓库
- 配置设置文件归属和权限
至此,git仓库已经创建好,但是我们并不能正确访问到,因为目录还有访问权限,我们需要将gittest目录下所有文件的访问权限修改为当前用户可以访问
cd /volume1 chown -R root:git_group gittest //修改gittest文件及其子目录的归属用户和组 cd
五、使用Git与配置ssh秘钥
- 接下来我们可以使用git来拉取NAS上的仓库了
git clone ssh://gittest_user@192.168.2.55/volume1/gittest/res.git
如果提示 Could not chdir to home directory /var/services/homes/gittest_user: Permission denied
warning: You appear to have cloned an empty repository.
我们需要将/var/service的权限修改一下
chmod 775 /var chmod 775 /var/services chmod 755 -R /var/services/homes //homes以及子目录的权限必须为755
- 配置ssh秘钥
这里使用git拉取,推送每次都需要使用密码,我们可以创建秘钥来实现免密ssh登陆 - 允许ssh使用秘钥验证
sudo vim /etc/ssh/sshd_config
解开以下几行的注释,并退出保存
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
接着重启 ssh 服务
sudo synoservicectl --restart sshd
或者在NAS网页控制台中重新关闭,打开ssh设置
2. 生成秘钥
在客户端主机中执行以下命令(我使用的git bash)
ssh-keygen -t rsa -f ./gittest_user //-f 指定秘钥文件路径和名称
此时我们就得到了两个文件
- 上传公钥文件到NAS
客户端执行以下命令(git bash)
scp ./gittest_user.pub username@192.168.2.55:/volume1/homes/gittest_user/.ssh
这个时候我们上传不了文件到NAS中,提示没有权限,这是因为NASgittest_user 目录下的权限是755
scp: /volume1/homes/gittest_user/.ssh//gittest_user.pub: Permission denied
只有临时把NAS的 /volume1/homes/gittest_user 目录权限改为777,上传之后再修改回来
上传成功之后,使用xshell执行:
cd /volume1/homes/gittest_user/.ssh/ cat gittest_user.pub > authorized_keys chmod 755 authorized_keys
- 客户端私钥转换
因为 TortoiseGit 和SourcesTree 使用的是ppk格式的私钥,我们需要把pem私钥转换成ppk私钥
打开PuTTY Key Generator,并导入pem私钥
点击 Save private key 保存ppk格式的私钥
- 使用TortoiseGit重新拉取
现在每次拉取推送都不再需要输入密码了
原文链接:https://blog.51cto.com/u_16213645/8053350