-
Notifications
You must be signed in to change notification settings - Fork 14
Description
系统版本:
- Ubuntu 16.04.1 LTS (腾讯云)
参考教程:
大多数情况下不需要搭建 Git 服务器,可以直接使用 GitHub 等代码托管平台。
然而在某些场景下,例如公司内部团队需要使用私有仓库,又不想购买 GitHub 等平台的企业版(GitHub免费私有仓库限制人数为3人,2019年),那就需要搭建一台 Git 服务器作为私有仓库使用。
一、安装git
$ ssh username@server # ssh登录服务器$ ssh -q -l ubuntu -p 22 <腾讯云 CVM IP 地址> # ssh登录腾讯云Ubuntu服务器主要参数说明:
-l指定登入用户
-p设置端口号
-f后台运行,并推荐加上 -n 参数
-n将标准输入重定向到 /dev/null,防止读取标准输入
-N不执行远程命令,只做端口转发
-q安静模式,忽略一切对话和错误提示
-T禁用伪终端配置
$ logout # 断开服务器连接注: Ubuntu 没有自带安装 git ,需要手动安装。查看是否安装 git : $ git --version 。
$ sudo apt-get install git附:安装最新版 git(不是必须的)
推荐直接使用如上安装方式,使用 apt 包管理器直接进行安装。
但是因为 Ubuntu 官方使用的 git 版本不一定是最新的,如果需要安装最新版 git ,需要添加 git 官方最新版的地址进行安装,参考下面的命令。
$ sudo add-apt-repository ppa:git-core/ppa输入完成后,系统会提示:
$ Press [ENTER] to continue or ctrl-c to cancel adding it按下回车键即可添加官方最新版地址,然后使用 $ sudo apt-get update 来更新列表(downloads the package lists from the repositories and "updates" them to get information on the newest versions of packages and their dependencies. But it does not install or upgrade any packages.),更新完成后使用 $ sudo apt-get install git 来安装 git 。
$ sudo apt-get update
$ sudo apt-get install git等待几分钟后, git 就完成了安装,可以通过下面的命令来检查 git 是否安装完成。
$ git --version二、创建git账户及密码
安装 git 后,创建一个名为 qcloud-git 的账户给 git 使用,可以使用下面的命令。
附: -m :在创建用户的同时创建用户的家目录( /home/username )。详见:linux useradd 命令基本用法
$ sudo useradd -m qcloud-git之后,为这个账户设置密码。
$ sudo passwd qcloud-git这里输入密码的时候是没有显示的,输入自定义的密码,并二次确认。
三、限制 git 账号的 ssh 连接只能是登录 git-shell
为了安全考虑,创建的 git 用户不允许登录服务器主机的 shell (可以执行包括 git 在内的其他操作),需要设置限制 git 账号的 ssh 连接只能是登录 git-shell (只可以执行 git 相关的操作)。具体原因
第一步:查找 git-shell 的安装位置。
$ which git-shell因为这里的 git 是通过 apt-get install git 安装的,所以输出 git-shell 的目录是 /usr/bin/git-shell 。(如果 git 是通过编译安装的,输出的 git-shell 目录可能是/home/ubuntu/bin/git-shell 。)
第二步:修改/etc/passwd文件
使用 vim (未安装需要先安装 sudo apt-get install vim )编辑 /etc/passwd 文件:
$ sudo vim /etc/passwd将最后一行关于 qcloud-git 的登录 shell 配置改为 git-shell 的目录(原来可能为空或为 /bin/bash ):
qcloud-git:x:1000:1000::/home/qcloud-git:/usr/bin/git-shell
注意将 /usr/bin/git-shell 为第一步用 which git-shell 找到的目录。
这样,用户 qcloud-git 就只能利用 SSH 连接对 Git 仓库进行推送和拉取操作,而不能登录机器并取得普通 shell 。 尝试普通 ssh 登录的话,会看到下面这样的拒绝信息:
$ ssh qcloud-git@gitserver
......
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
......注:普通 ssh 登录为 $ ssh username@server ,其中的 username 为服务器的用户名,而不是 $ sudo useradd -m qcloud-git 创建的 git 用户名。
四、初始化git仓库并配置用户权限
第一步:创建目录,用于存放 git 仓库。
附: -p 作用:建立一个绝对路径目录,不管即使之前data目录是否存在。
$ sudo mkdir -p /data/repositories第二步:创建完成后,初始化这个仓库。
使用 --bare 会创建一个裸仓库,裸仓库没有工作区,因为服务器上的 git 仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的 git 仓库通常都以 .git 结尾。此处创建一个名为 test 的仓库。
$ cd /data/repositories
$ sudo git init --bare test.git附:如何初始化仓库以便git部署项目代码至服务器
第三步:配置用户权限
为了安全考虑,需要给 git 仓库目录设置用户和用户组(这里都设置为 qcloud-git )并设置权限。
$ sudo chown -R qcloud-git:qcloud-git /data/repositories
$ sudo chmod 775 /data/repositories-R表示递归修改所有子目录所属分组。775表示权限,Linux下文件/文件夹权限分为三种,文件拥有者权限、文件所属组成员权限、以及其他人的权限。775三位分别对应这三种权限。每一位中,4表示可读,2表示可写,1表示可执行(文件夹的话表示可进入),最后相加的和表示权限集合。这里我们设置为组目录以及子目录的权限为775表示拥有者可读、可写、可执行;所属组成员可读、可写、可执行;其他人可读、可执行,但是不可写。
注意:因为第一次设置用户和用户组并设置权限。以后每次 $ sudo git init --bare xxx.git 创建一个裸仓库后,都要执行以上命令,给 git 仓库设置用户和用户组并设置权限。不然会报错: ..... remote: error: insufficient permission for adding an object to repository database ./objects ...... 。
查看 git 仓库的用户权限: $ ls -la 。
五、创建ssh密钥登录
设置基于 ssh 密钥的身份验证,可以在不输入密码的情况下连接 Linux 服务器。如果只执行
$ git clone,这一步设置不是必须的,因为可以通过输入服务器密码登录。
如果需要执行$ git push,这一步是必须的,因为配置好本地和服务器的 SSH 后,才有权限向服务器上我们自己的项目提交代码)。
设置 .ssh 目录和秘钥文件权限:
除了文件所有者外,其他用户不可读、写、执行 .ssh 目录及目录中的 authorized_keys,
这也很好理解,如果其他用户有了 .ssh 目录或目录下的 authorized_keys 读写权限:
- 可以阅读
id_rsa私钥,那私钥的保密性就荡然无存; - 可以把远程主机上的 authorized_keys 随意替换成自己生成的公钥,就可以通过 ssh 登录连接。
所以,为了安全,需要执行以下命令:
$ cd /home/qcloud-git
$ sudo mkdir .ssh && sudo chmod 700 .ssh
$ sudo touch .ssh/authorized_keys && sudo chmod 600 .ssh/authorized_keys
$ sudo vim .ssh/authorized_keys # 添加公钥收集所有需要登录的用户的公钥,即用户们的 id_rsa.pub 文件,把所有公钥导入到服务器的 /home/qcloud-git/.ssh/authorized_keys 文件里,一行一个。
公钥就是一段字符串,只要把它追加在 authorized_keys 文件的末尾就行了。
注意:这里的 qcloud-git 为 $ sudo useradd -m qcloud-git 创建的用户名。
具体参考:git-scm.com:服务器上的 Git - 配置服务器
附:管理公钥
如果团队很小,把每个人的公钥收集起来放到服务器的 /home/git/.ssh/authorized_keys 文件里是可行的。如果团队有几百号人,可以使用 Gitosis 来管理公钥。
附:Ubuntu桌面版安装ssh服务器
默认情况下,在 Ubuntu Desktop (桌面版)中安装了 SSH Client ,没有安装 SSH server ,需要手动安装 SSH Server 。
注: Ubuntu Server (服务器版)一般都安装了 SSH Server 。 Linux 和 macOS 默认只安装了 SSH Client ,没有安装 SSH Server 。
$ sudo apt install openssh-server安装完成后, SSH 服务将自动启动。要验证安装是否成功并且 SSH 服务正在运行,请键入以下命令,该命令将打印 SSH 服务器状态:
$ sudo systemctl status ssh此时应该看到 Active: active (running) 的相关内容。
六、克隆远程(服务器)仓库到本地
$ git clone qcloud-git@<腾讯云 CVM IP 地址>:/data/repositories/test.git