zoukankan      html  css  js  c++  java
  • 在CentOS下搭建自己的Git服务器

    首先需要装好CentOS系统,作为测试,你可以选择装在虚拟机上,这样比较方便。这步默认你会,就不讲了。
    有了CentOS,那么如何搭建Git服务器呢?
    1、首先需要安装Git,可以使用yum源在线安装:

    [root@localhost Desktop]# yum install -y git
    

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

    # adduser git  
    

    3、初始化git仓库:这里我们选择/data/git/learngit.git来作为我们的git仓库

    [root@localhost git]# git init --bare learngit.git  
    Initialized empty Git repository in /data/git/learngit.git/  
    

    执行以上命令,会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

    [root@localhost git]# chown git:git learngit.git
    [root@localhost git]#chmod -R 755 learngit.git

    4、在这里,Git服务器就已经搭得差不多了。下面我们在客户端clone一下远程仓库

    Zhu@XXX /E/testgit/8.34
    $ git clone git@192.168.8.34:/data/git/learngit.git
    Cloning into 'learngit'...
    The authenticity of host '192.168.8.34 (192.168.8.34)' can't be established.
    RSA key fingerprint is 2b:55:45:e7:4c:29:cc:05:33:78:03:bd:a8:cd:08:9d.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.8.34' (RSA) to the list of known hosts.
    git@192.168.8.34's password:
    

    这里两点需要注意:第一,当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告:

    The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
    RSA key fingerprint is xx.xx.xx.xx.xx.
    Are you sure you want to continue connecting (yes/no)?
    

    这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

    Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了:

    Warning: Permanently added 'github.com' (RSA) to the list of known hosts.
    

    这个警告只会出现一次,后面的操作就不会有任何警告了。
    如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。
    第二,这里提示你输入密码才能clone,当然如果你知道密码,可以键入密码来进行clone,但是更为常见的方式,是利用SSH的公钥来完成验证。

    5、创建SSH Key

    本地

    1.配置查看

    $ git config --lis  
    

    用户名和邮箱,如果已填写过则PASS

    $ git config --global user.name "username"  
    $ git config --global user.email "mail@gmail.com" 
    

    若想修改用户名或邮箱

    $  git config --global --replace-all user.email "输入你的邮箱" 
    $  git config --global --replace-all user.name "输入你的用户名"
    

    然后再查看下

    $  git config --list
    

    发现修改成功了

    2.生成SSH密钥

    $ ssh-keygen -t rsa -C "mail@gmail.com"  
    

    执行后,
    第一个提示输入保存文件名,默认为空,回车。

    第二个提示输入密钥,默认为空,回车

    第三个确认刚输入密钥,默认为空,回车

    完成后,默认保存位置当前 用户名下/.ssh/id_rsa 和id_rsa.pub

    id_rsa 私钥

    id_rsa.pub公钥

    你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

    如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsa和id_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

    6、Git服务器打开RSA认证
    然后就可以去Git服务器上添加你的公钥用来验证你的信息了。在Git服务器上首先需要将/etc/ssh/sshd_config中将RSA认证打开,即:

    1.RSAAuthentication yes     
    2.PubkeyAuthentication yes     
    3.AuthorizedKeysFile  .ssh/authorized_keys

    重启ssh服务  /etc/init.d/sshd restart

    这里我们可以看到公钥存放在.ssh/authorized_keys文件中。所以我们在/home/git下创建.ssh目录,然后创建authorized_keys文件,并将刚生成的公钥导入进去。

    设置权限

    服务器端

    git文件夹归属git账户

    $ cd home
    $ chown -R git:git git#设置git文件夹所有用户归git用户
    $ cd /home/git/
    $ mkdir .ssh #新建文件夹
    $ chmod 700 .ssh 
    $ touch .ssh/authorized_keys  #新建文件
    $ chmod 600 .ssh/authorized_keys#权限只归用户,去除无关用户的权限
    

    重要重要重要

    $ cd home
    $ chown -R git:git git#设置git文件夹所有用户归git用户
    重启ssh服务 /etc/init.d/sshd restart

    切记否则clone依旧需要输入密码

    添加证书之前,还要做这么一步:Git服务器打开RSA认证

    $ vim /etc/ssh/sshd_config
    

    即:

    1.RSAAuthentication yes
    2.PubkeyAuthentication yes
    3.AuthorizedKeysFile home/git/.ssh/authorized_keys

    这里我们可以看到公钥存放在home/git/.ssh/authorized_keys文件中。

    所以我们在/home/git下创建.ssh目录,然后创建authorized_keys文件,并将刚生成的公钥复制进去。

    然后再次clone的时候,或者是之后push的时候,就不需要再输入密码了

    然后再次clone的时候,或者是之后push的时候,就不需要再输入密码了:

    Zhu@XXX/E/testgit/8.34
    $ git clone git@192.168.8.34:/data/git/learngit.git
    Cloning into 'learngit'...
    warning: You appear to have cloned an empty repository.
    Checking connectivity... done.
    

    7、禁用git用户的shell登陆
    出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/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每次一登录就自动退出。

  • 相关阅读:
    算法训练 P1103
    算法训练 表达式计算
    算法训练 表达式计算
    基础练习 时间转换
    基础练习 字符串对比
    Codeforces 527D Clique Problem
    Codeforces 527C Glass Carving
    Codeforces 527B Error Correct System
    Codeforces 527A Glass Carving
    Topcoder SRM 655 DIV1 250 CountryGroupHard
  • 原文地址:https://www.cnblogs.com/grimm/p/5381234.html
Copyright © 2011-2022 走看看