在个人服务器上搭建git仓库
文章目录
github是对于可公开的代码来说是一个非常完美的托管点,然而我们往往会有一些东西不希望是公开的,GitHub的私有仓库我又不想去付费,其他的仓库又不想去用,所以就直接自己来折腾一个私有Git仓库了。其实整个过程非常简单,十分钟就能搞定。
安装git
以下操作均在root用户权限下操作,如果非root登陆可以在命令之前加上sudo
。
CentOS
$ yum install git
Debian类系统
$ apt-get install git
创建git用户
$ adduser --home /data/git --disabled-login git
创建证书登陆
创建密匙文件
# 切换为用户git
$ su git
# 创建ssh密匙文件夹并创建密匙保存文件
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
导入用户密匙
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub
文件,把所有公钥导入到/home/git/.ssh/authorized_keys
文件里,一行一个。
示例:
# 生成key
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/git/.ssh/id_rsa):Evan_key
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
# 输入key文件名和密码后会在目录下生成Evan_key(私匙)、Evan_key.pub(公匙)
# 导入公匙(私匙自己保存)
$ cat Evan_key.pub >> /home/git/.ssh/authorized_keys
初始化Git仓库
先选定一个目录作为Git仓库,假定是/home/git/sample.git
,在/home/git
目录下输入命令:
$ git init --bare sample.git
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。如果上述初始化仓库的操作不是以git用户运行的,则还需要把owner改为git:
$ sudo chown -R git:git sample.git
禁用shell登陆
出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd
文件完成。找到类似下面的一行:
git❌1001:1001:,,,:/home/git:/bin/bash
改为:
git❌1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。
克隆远程仓库
设置用户
$ git config --global user.name "Git账号"
$ git config --global user.email "Git邮箱"
设置ssh私匙与服务器
编辑~/.ssh/config
(Windows系统下也是用户目录),通过这个配置文件可以指定不同网站(HostName
)的用户名(User
)、端口(Port
)、私匙文件路径(IdentityFile
)、认证方式(PreferredAuthentications
)等。
Host example_domain.com
HostName example_domain.com
User git
PreferredAuthentications publickey
IdentityFile /x/ssh/id_rsa_on_example_domain
Port 1234
Host example_domain1.com
HostName example_domain1.com
User git
PreferredAuthentications publickey
IdentityFile /x/ssh/id_rsa_on_example_domain1
Port 1234
克隆仓库
在按上述步骤设置了~/.ssh/config
文件的情况下,可以通过 git clone
命令克隆远程仓库了,在各自的电脑上运行:
# 访问example_domain.com仓库的时候自动使用`~/.ssh/config`下对应网站的用户名和端口
$ git clone example_domain.com:/home/git/sample.git
如果没有设置~/.ssh/config
文件,也可以手动添加私匙,然后通过ssh-agent来管理运行:
# 启动ssh-agent
eval $(ssh-agent -s)
# 添加私匙到ssh-agent(根据自己私匙的位置和名称替换,我这里是id_rsa)
ssh-add ~/.ssh/id_rsa
# 克隆远程仓库
git clone ssh://git@server_ip_or_domainname:port/home/git/sample.git
管理公匙与权限
如团队非常多或者对权限要求很高,可以采用如下的软件:
- 公匙:Gitosis
- 权限:Gitolite
新建私有仓库
后续新建私有仓库只要按照初始化Git仓库步骤操作即可。
参考
[1] 廖雪峰大神的搭建Git服务器的复制,结合了一点点自己的实际情况。
[2] 关于Git也可以看看廖雪峰的Git教程。
文章作者 Evan Yu
上次更新 2018-12-27