最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

搭建个人Git服务器

XAMPP下载 admin 1097浏览 0评论
 Git的安装
详细学习可以到:Git 官方教程

依赖安装
[root@centos7 ~] yum install git
[root@centos7 ~] git –version
Git 版本:git version 1.8.3.1

 译安装
Git Hub 选择 release版本

Git 的依赖 curl-devel expat-devel gettext-devel openssl-devel zlib-devel
进行下载、解压、配置、编译、安装

[root@centos7 ~] yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
[root@centos7 ~] wget https://codeload.github.com/git/git/tar.gz/v2.20.0-rc0

[root@centos7 ~] tar -xvf v2.20.0-rc0
[root@centos7 ~] make configure
[root@centos7 ~] ./configure
[root@centos7 ~] make && make install
此处使用 ./configure 直接使用默认配置,实际上和 yum 没什么区别了

[root@centos7 ~] git –version
Git 版本:git version 2.20.0-rc0

创建 Git 用户
为了访问的便捷,我们使用 git 用户的身份来创建代码仓库,实际上使用任何用户都是可以的,区别在于在 git clone 的时候,需将 git@server 改成别的用户名
[root@centos7 ~] adduser git
Git 的 SSH 协议使用 SSH key 免密鉴权
The authorized_keys file in SSH specifies the SSH keys that can be used for logging into the user account for which the file is configured.
centos7 里的 ssh 配置

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys
所以我们明白了 authorized_keys 文件是用以保存已授权的客户端公钥。具体参见: SSH原理

如果在创建「ssh-key」的时候使用了「passphrase」 ,那么使用「SSH」的「method: publickey」方式进行连接时会报出一个提示:Enter passphrase for key ‘/home/git/.ssh/id_rsa’,与免密登录违背了

[root@centos7 ~] su git
[root@centos7 ~] ssh-keygen -t rsa
[root@centos7 ~] cat /home/git/.ssh/id_rsa.pub >> /home/git/.ssh//authorized_keys
[root@centos7 ~] chmod 700 /home/git/.ssh

+—[RSA 2048]—-+
|o. +XE=o.        |    # -t:指定生成密钥类型(rsa、dsa、ecdsa等)
|o.=+=*=          |    # -P:指定passphrase,用于确保私钥的安全
| . . o B o       |    # -f:指定存放密钥的文件
|  .   = .        |
|o+.oo* o o       |
|o o ..+ + .      |    # authorized_keys    #保存已授权的客户端公钥
|.  o +.oS. .     |    # known_hosts        #保存已认证的远程主机ID
|.   o B.+ .      |    # id_rsa.pub         #保存公钥
|       .         |    # id_rsa             #保存私钥
+—-[SHA256]—–+
在 authorized_keys添加需要授权 shell 登录用户的公钥,首先「server」向「client」发送一个随机数值,用户在「client」返回使用密钥加密随机数后的密文在「server」进过公钥解密与原随机数进行比对从而完成一次认证过程

测试 publickey 方式登录
[root@centos7 ~] ssh -vv git@104.199.134.0 #追溯两层错误
如果出现错误,根据 debug 的关键字搜索。其中大部分原因可以分为两种:

1. SSH 配置问题
2. 文件权限问题
正常使用的:sshd_config

#       $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options change a
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# Disable legacy (protocol version 1) support in the server for new
# installations. In future the default will change to require explicit
# activation of protocol 1
Protocol 2

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key

# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024

# Logging
# obsoletes QuietMode and FascistLogging
SyslogFacility AUTH
#SyslogFacility AUTHPRIV
LogLevel debug

# Authentication:

#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don’t trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication

 #IgnoreUserKnownHosts no
# Don’t read the user’s ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication yes

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes

# GSSAPI options
#GSSAPIAuthentication no
GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no

# Set this to ‘yes’ to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of “PermitRootLogin without-password”.
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to ‘no’.
#UsePAM no
UsePAM yes

# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
A

 cceptEnv XMODIFIERS

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no
#ChrootDirectory none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem       sftp    /usr/libexec/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       ForceCommand cvs server
更改文件权限

[root@centos7 ~] chmod 700 /home/git/.ssh
[root@centos7 ~] chmod 600 /home/git/.ssh/authorized_keys
正常登录效果
[root@centos7 ~]$ ssh git@104.199.134.0

The authenticity of host ‘104.199.134.0

(104.199.134.0

)’ can’t be established.
ECDSA key fingerprint is SHA256:49g0X6kyudjfjCa/QBoZwf0mbPZnFphYjMRV/LrQPpQ.
ECDSA key fingerprint is MD5:cc:ef:83:ab:e4:33:00:9e:0f:62:87:df:62:01:73:62.
Are you sure you want to continue connecting (yes/no)?
登录后 .ssh 下就生成了 known_hosts

[root@centos7 ~]$ vim /home/git/.ssh/known_hosts

104.199.134.0

ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABEBPA/O+a8s92uinv3NKnVzGqaohbX6vqDVGMoE5vs+PuT7NXivy5aSkRutROcN/H8AhnBLaK5HWGsqwBRw8FXgSY=
禁用 shell 登录
因为git用户是专门用来上传代码的,所以禁用git用户的登录权限
将 /sbin/nologin 作为 git 用户的登录 shell,即禁止 git用户 shell 登录

[root@centos7 ~] usermod -s /sbin/nologin git   #禁止shell登录
[root@centos7 ~] usermod -s /bin/bash git       #恢复默认shell
普通仓库与裸仓库的区别
git 不仅可以做本地开发的版本控制,更多还用与团队写作的迭代开发。普通仓库保存着工程代码、版本历史,远程的裸仓库即版本库仅包含记录着版本历史的文件

使用 git init –bare 方法创建一个所谓的裸仓库,之所以叫裸仓库是因为这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作,如果你硬要操作的话,只会得到下面的错误: This operation must be run in a work tree
创建普通仓库
[root@centos7 ~] su – git
[root@centos7 ~] git init sea.git
git init 用来搭建本地仓库,在工程中使用的 commit 保存到本地仓库

创建裸仓库
[root@centos7 ~] su – git
[root@centos7 ~] git init –bare sea.git
git init –bare 用来搭建远程仓库,在工程中使用 push 推送到远程仓库

初始化 Git 仓库
前面我们创建了 git 用户,那么 git 用户的 home 目录变可以用来当仓库路径

这里的 git 仓库便是远程仓库了,用户们使用 push 命令将更新推送到远程仓库,使用 –bare 选项运行 git init 来建立一个裸仓库

仓库后缀都是 .git
创建远程仓库目录并初始化了空的仓库

[root@centos7 ~] cd /home/git/
[root@centos7 ~] mkdir sea.git
[root@centos7 ~] git init –bare sea.git
克隆协议
本地协议(Local protocol)
所谓的远程仓库在该协议中的表示,就是硬盘上的另一个目录。这常见于团队每一个成员都对一个共享的文件系统(例如 NFS)拥有访问权,或者比较少见的多人共用同一台电脑的情况。

Git 协议
用 Git 协议作为访问项目的唯一方法通常是不可取的。一般的做法是,同时提供 SSH 接口,让几个开发者拥有推送(写)权限,其他人通过 git:// 拥有只读权限。

这是一个包含在 Git 软件包中的特殊守护进程; 它会监听一个提供类似于 SSH 服务的特定端口(9418),而无需任何授权。打算支持 Git 协议的仓库,需要先创建 git-daemon-export-ok 文件 — 它是协议进程提供仓库服务的必要条件 — 但除此之外该服务没有什么安全措施。要么所有人都能克隆 Git 仓库,要么谁也不能。这也意味着该协议通常不能用来进行推送。你可以允许推送操作;然而由于没有授权机制,一旦允许该操作,网络上任何一个知道项目 URL 的人将都有推送权限。
SSH 协议
SSH 也是唯一一个同时支持读写操作的网络协议。也是默认协议

[root@centos7 ~] git clone ssh://user@server/project.git
[root@centos7 ~] git clone user@server:project.git
HTTP/S 协议
HTTP 或 HTTPS 协议的优美之处在于架设的简便性。基本上,只需要把 Git 的裸仓库文件放在 HTTP 的根目录下,配置一个特定的 post-update 挂钩(hook)就可以搞定(Git 挂钩的细节见第 7 章)。此后,每个能访问 Git 仓库所在服务器上 web 服务的人都可以进行克隆操作。

客户机拉取远程仓库代码
使用账号:密码方式拉取
操作环境:windows clone 虚拟机的远程仓库

[root@centos7 ~] git clone git@192.168.108.128:/home/git/sea.git

# Cloning into ‘sea’…
# git@192.168.108.128’s password:
# warning: You appear to have cloned an empty repository.
-SSH方式拉取

[root@centos7 ~] git clone git@164.109.134.117:/home/git/sea.git

# Cloning into ‘test1.git’…
# done.
# warning: You appear to have cloned an empty repository.
非默认端口的SSH协议拉取代码
[root@centos7 ~] git clone ssh://git@193.29.97.24:14726/home/git/star.git
设置配置信息
[root@centos7 ~] git config –global user.email “sea.star.com


[root@centos7 ~] git config –global user.name

“sea”
[root@centos7 ~] git config –global — list

# user.email=sea@star.com
user.name

=sea
一个项目push到多个远程Git仓库
查看远程仓库

[root@centos7 ~] git remote -v

# origin    git@193.29.97.24:/home/git/sea.git (fetch)
# origin    git@193.29.97.24:/home/git/sea.git (push)
在远程仓库建立对应的裸仓库
[root@centos7 ~] git init –bare star.git

 添加远程仓库

[root@centos7 ~] git remote add star ssh://git@193.29.97.24:14726/home/git/star.git
再次查看远程仓库

[root@centos7 ~] git remote -v

# origin    git@193.29.97.24:/home/git/sea.git (fetch)
# origin    git@193.29.97.24:/home/git/sea.git (push)
# upstream    ssh://git@193.29.97.24:14726/home/git/star.git (fetch)
# upstream  ssh://git@193.29.97.24:14726/home/git/star.git (push)
删除远程仓库
[root@centos7 ~] git remote rm upstream
[root@centos7 ~] git remote -v

# origin    git@193.29.97.24:/home/git/sea.git (fetch)
# origin    git@193.29.97.24:/home/git/sea.git (push)
多个远程仓库需要分别推送
关于 Git 版本的选择
Git的升级策略大多是安全更新,少有重大新特性更新,升级可能会引入系统失效陷阱,由此浪费的时间精力完全不必要。

转载请注明:XAMPP中文组官网 » 搭建个人Git服务器

您必须 登录 才能发表评论!