[TOC]
最近由于准备在公司的服务器上面搭建静态博客(Hexo),然后需要先搭建一个git服务器作为转接,整个过程看似顺利,十几分钟就搭建完成,不过最后在验证这块卡了两个小时,在此记录下来,供准备搭建git服务器的新手小伙伴们借鉴。
## 搭建git服务器
通过ssh链接到服务器,开始进行操作
### 第一步 在服务器上安装 git
~~~
$ yum install git
~~~
### 第二步 创建 git 用户,用来运行git服务
~~~
$ adduser git
#可以用userpwd git 设置个密码
~~~
### 第三步 创建证书,免密码登录:
**Git服务器打开RSA认证**
在Git服务器上首先需要将/etc/ssh/sshd_config中将RSA认证打开,即:
~~~
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
~~~
重启ssh服务器(也有可能不需要重启,我不太清楚)?(不同服务器有不同的重启方式,请选择正确的重启方式,如下:)
`systemctl restart sshd.service`
或者
`/etc/rc.d/init.d/sshd restart`
或者
`/etc/init.d/sshd restart`
收集所有需要登录的用户的公钥(`id_rsa.pub`)文件,把所有公钥导入到 `/home/git/.ssh/authorized_keys` 文件内,**一行一个**。
> **注意:一定要通过下面的命令将该文件其他用户的所有权限移除,否则会出现文章尾部问题**
~~~
$ chown -R git:git /home/git/.ssh
$ chmod 600 /home/git/.ssh/authorized_keys
~~~
### 第四步 初始化git仓库
~~~
$ git init --bare test.git
~~~
git创建一个裸仓库,裸仓库没有工作区,因为服务器上的git仓库纯粹为了共享,所有不能让用户直接登录到服务器上去改工作区,并且服务器的git仓库通常以 `.git` 结尾。然后,修改owner改为git:
~~~
$ sudo chown -R git:git test.git
~~~
### 第五步
禁用shell登录:
处于安全的考虑,第二步创建的git用户不允许登录shell,这可以通过编辑 `/etc/passwd` 文件完成。
~~~
git:x:1003:1003::/home/git:/bin/bash
~~~
改为
~~~
git:x:1003:1003::/home/git:/usr/bin/git-shell
~~~
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
### 第六步
克隆远程仓库:
现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:
~~~
$ git clone git@server:/home/git/test.git
~~~
如果服务器的ssh端口不是默认的22的话,比如说6789,可以这样写:
~~~
$ git clone ssh://git@server:6789/home/git/test.git
~~~
## 问题来了
本来根据文档,根据广大猿友的经验,我的搭建之路已经完成了,然后最后一步出现了问题。每次跟服务器进行交互(clone,pull,push),都让我输入git的密码,也就是说,我配置的ssh没有生效。然后就开始到处找原因,重新生成rsa,提升authorized_keys权限,重新创建服务器git账户,重新。。。。。
翻遍了 Stack Overflow 和 segmentfault ,两个小时过去了,问题仍然没有进展,这么简单的东西,问题到底出在哪里。
就在心灰意冷,准备放弃的时候,不知道是哪里来的灵感,准备把 authorized_keys 文件的其他用户的权限删掉,然后就能用了,后就能用了,就能用了,能用了,用了,了~~~~,命令如下,不想多说话,我想静静。
~~~
$ chmod 600 authorized_keys
~~~
参考文章:[在 Linux 下搭建 Git 服务器](https://www.cnblogs.com/dee0912/p/5815267.html)
- 关于我
- nginx
- 代理
- 实例1
- 使用Nginx实现反向代理
- nginx反向代理配置
- Nginx缓存原理及配置
- nginx 信号集
- rewrite
- nginx rewrite规则
- nginx rewrite 正则规则详解
- nginx+php-fpm fastcgi防止跨站、跨目录的安全设置
- 写了个shell脚本,实现nginx日志自动切割,并利用goaccess分析成HTML报表,然后通知管理人员查阅
- nginx禁止一些常见的不应该让用户访问的文件
- PHP
- 实现PHP多进程管理
- php代码规范
- Linux
- 常用命令
- scp
- touch
- nohup
- rsync
- ssh命令 远程登录
- chmod
- nginx日志切割脚本
- Linux使用ssh公钥实现免密码登录Linux
- 使用ssh公钥密钥自动登陆linux服务器
- Linux查看程序端口占用情况
- ssh 公钥私钥认证原理
- 路由图
- CentOS7防火墙设置
- linux下用户管理
- Linux 服务器安全技巧
- Linux shell 提取文件名和目录名
- Linux环境下设置命令别名(alias)
- Git
- 搭建Git服务器
- 手把手教你搭建git服务器
- Git 基本操作
- git删除文件夹/文件(不删除本地文件)
- git忽略文件和文件夹以及文件权限
- Git的四个区五种状态
- git init 和 git init --bare 的区别
- git仓库删除所有提交历史记录,成为一个干净的新仓库
- 如何正确使用Git Flow
- HTTP
- 前端跨域解决方案
- HTTP基本概念
- Redis
- Redis 数据类型及应用场景
- JavaScript
- WebSocket探秘
- socket与websocket的区别
- 基于 Swoole 的微信扫码登录
- Web前端开发规范手册
- 简单的学习了一下ES6
- ES6模块的import和export用法
- MySql
- MySql重置root密码的方法
- mysql 5.6.30 开启慢查询日志
- mysql查看锁表情况
- 我的设计稿
- 会计出纳系统
- 上门宝ERP系统
- 社交应用七大需求
- 出纳系统
- 利用SdfMpp搭建中大行软件系统
- B2C库存商品系统
- 软件
- 网上商城
- 思维逻辑
- 系统架构分层图
- 代码检查规范
- 研发计划
- 系统架构
- 我设计的架构架构图
- 电商网站架构案例
- 大型网站架构
- 服务熔断、降级、限流、异步RPC
- 软件版本号规范
- 第三方服务引擎
- kafka
- ElasticSearch
- 阿里云 推荐引擎
- 随记
- 人生最大的投资
- 产品研发团队管理的6个方面
- 我感觉自己根本不是一个创业者,更谈不上企业家,果然还是屌丝这个称呼更适合我。
- 学什么语音都应该养成的编程习惯
- 2018年5月23日 多云转阴 15-24°C 离职信
- 2017年12月25日
- 对“目标”的认知
- 个人简历
- API设计
- 理解OAuth 2.0
- OAuth 2.0四种授权方式小结
- 对 REST 的理解
- RESTful API 设计指南
- RESTful API 设计
- RPC
- 微服务架构方案
- SOA
- 理解RESTful架构
- RESTful API GET,DELETE,PUT和POST的响应状态码
- MongoDB
- MongoDB-无法启动的一个问题