linux ubuntu 搭建git 服务器
准备
- 一台linux 服务器即可, 需具备sudo 权限
我这里是用的Ubuntu的服务器,只需要简单的apt命令即可完成
步骤
一、安装git
cmd : apt-get install git
root@fengtangzheng:~# apt-get install git
Reading package lists... Done
Building dependency tree
Reading state information... Done
git is already the newest version (1:2.7.4-0ubuntu1.6).
0 upgraded, 0 newly installed, 0 to remove and 17 not upgraded.
二、创建 git 用户
在服务器上做操作,最好针对每一类操作设置独立的账号,保障服务器安全。
PS: 如果为私人服务器或者对权限控制无要求,可以直接使用root账号即可,跳过此步骤
2.1 创建用户
adduser --home-dir /home/git git
输入自定义密码后
一路回车即可创建 用户 git
2.2 权限控制
上述方法创建的git用户拥有shell 权限,这里需要控制其权限仅能执行 git 相关操作
编辑 /etc/passwd 文件
将:
git:x:1000:1000:,,,:/home/git:/bin/bash
修改为:
git:x:1000:1000:,,,:/home/git:/usr/bin/git-shell
类似的,若要修改其他的权限也可通过此方式。
三、ssh 免密登录
如果不设置ssh免密登录,每次clone, push 等操作都需要输入服务器密码(创建用户时设置的密码)
4.1 创建密钥对
在本地电脑的用户主目录下,查看是否有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,则创建 ssh 密钥对, 打开 git bash (windows git 客户端), 输入命令:
$ ssh-keygen -t rsa -C "youremail@example.com"
一路回车即可,创建完成后, 用户目录的 .ssh 文件夹下出现id_rsa和id_rsa.pub两个文件, id_rsa 为私钥,自己妥善保管,不可泄露, id_ras.pub 为公钥,可以告知他人
4.2 公钥 id_rsa.pub 导入git 用户(其他用户也一样)
一般来讲,服务器都已经开启的sshd 服务(提供ssh访问功能),如果未开启则:在服务器上编辑**/etc/ssh/sshd_config**文件将RSA认证打开,即:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
AuthorizedKeysFiles 指定的文件即为服务器存储公钥的文件。将上一步创建的公钥拷贝进此文件即可。多个公钥分行存放。
PS: 注意到, AuthorizedKeysFile 的值中有个 %h 符号, 这代表当前登录用户的用户目录,这里表示第二步创建用户指定的 /home/git 目录
PS:其他用户也一样, copy 公钥到对应的用户目录下的 .ssh/authorized_keys 即可
4.3 重启sshd 服务
本人自己搭建的时候,发现公钥导入authorized_keys 文件后,必须重启sshd 服务,否则仍然无法通过ssh登录,这一点很多博客上没有提到,浪费不少时间
service ssdh restart
四、初始化git仓库
创建好git 仓库 目录,如: /data/git/note.git/
将 /data/git 目录的所有人修改为 git, 在 /data/ 目录下运行命令
chown -R git:git git
在 /data/git/
目录下 运行命令:
git init --bare note.git
就生成了一个空的仓库
五、git clone
本地电脑尝试 clone 服务器仓库
$ git clone git@114.115.145.126:/data/git/note.git
Cloning into 'note'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
clone 成功,且无需输入密码
PS: 如果为创建专门的 git 用户, 則:git clone root@114.115.145.126:/data/git/note.git