搭建 Git 服务器(Ubuntu 系统)

1. 安装 Git

sudo apt-get install git

2. 创建一个 git 用户,用来运行 git 服务

sudo adduser git

3. 创建证书登录(可选:这一步的作用是进行相关操作时,免输密码)

  ssh key 的基本原理是:在你本机上创建两个 key 文件,一个是私钥,一个是公钥,私钥放在本地,公钥放在远程服务器。当你通过 ssh key 登录到远程服务器时,

  远程服务器使用公钥创建一个加密的随机消息,然后发送到本地机器,本地机器使用私钥解密消息,发送解密的消息到远程服务器。远程服务器验证这个解密后的消息,然后授权访问。

  实际过程比这个复杂,但我们这里理解大概就可以了。具体操作如下(Windows 下操作相同,命令可在 Git Bash 中执行):

 (1) 生成 ssh 密钥

  • 查看是否已经有 ssh 密钥(如果没有密钥则不会有此文件夹,有则备份删除)
    cd ~/.ssh
    mkdir
    ~/.ssh
  • 生成 ssh 密钥
    ssh-keygen -t rsa

    按 3 个回车,密码为空。最后得到了两个文件:~/.ssh/id_rsa.pub(公钥)和 ~/.ssh/id_rsa(私钥)

 (2) 将公钥文件内容加到服务器 ~/.ssh/authorized_keys 文件中

  • 拷贝公钥文件到服务器
    scp ~/.ssh/id_rsa.pub git@58.241.22.107: 

   注 1:上述 scp 命令末尾有一个冒号

     注 2: 58.241.22.107 为服务器 IP 地址,拷贝后的文件路径是 /home/git/id_rsa.pub。

  • 切换到 git 用户,检查 ~/.ssh 目录是否存在,不存在则创建它,并创建 ~/.ssh/authorized_keys 文件
    su git
    cd
    ~/.ssh
    mkdir
    ~/.ssh touch ~/.ssh/authorized_keys
  • 拷贝公钥内容到 ~/.ssh/authorized_keys 文件中
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    rm ~/id_rsa.pub

 (3) 修改相关目录权限

  • 只允许 git 用户访问
    chown -R git:git ~/.ssh
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

4. 初始化 Git 仓库

  • 切换到 Git 仓库的存放目录
    cd ~/
    mkdir GitRepository
    cd GitRepository
  • 创建 git 存储库,并设置相关权限(若 git 用户执行不了 sudo 命令,解决方法见文末参考1)
    sudo git init --bare xxx.git
    sudo chown -R git:git xxx.git

执行完该命令 Git 就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的 Git 仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区。

此外,服务器上的 Git 仓库通常都以 .git 结尾。

  • 退出 git 用户
    exit

5. 禁用 shell 登录(可选)

出于安全考虑,第 2 步创建的 git 用户不允许登录 shell,这可以通过编辑 /etc/passwd 文件完成

    sudo vim /etc/passwd

找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git 用户可以正常通过 ssh 使用 git,但无法登录 shell,因为我们为 git 用户指定的 git-shell 每次一登录就自动退出。

注:若没有该文件的写权限,可执行以下命令更改

    sudo chmod 666 /etc/passwd

6. 克隆远程仓库

  通过 git clone 命令克隆远程仓库:

  git clone git@服务器 IP 地址:仓库地址/xxx.git

  注1:示例 git clone git@58.241.22.107:/home/git/GitRepository/VerifyPlatform_Cmd.git

  注2:运行 git clone 时,如果报 sign_and_send_pubkey: signing failed: agent refused operation,则运行下以下命令

   eval "$(ssh-agent -s)"
   ssh-add

    

参考1:Ubuntu 报 "xxx is not in the sudoers file.This incident will be reported" 错误解决方法

参考2:搭建 Git 服务器-廖雪峰的官方网站

  

原文地址:https://www.cnblogs.com/dhqy/p/12575244.html