Git远程09:Git服务搭建-阿里云开发者社区

开发者社区> jeremy_wong> 正文

Git远程09:Git服务搭建

简介:
+关注继续查看

GitHub和Gitlab是最常见的两个免费的Git Server,本博客就是搭建在GitHub上,GitLab没有于GitHub出名,其提供了免费的私有Git库,GitHub的私有库则是收费的。也可以在自己的服务器上搭建Git远程库,推送和拉取的速度比直接使用GitHub快,也不会存在安全性问题,本文介绍相关操作。

环境

操作系统:CentOS6.6
服务器IP地址:192.168.80.6
服务器Git版本:1.7.1
若服务器没有安装Git,请先安装。

1
# yum install git

客户端:Win7,Cygwin
客户端IP地址:192.168.80.2

创建Git用户

1
2
3
4
5
6
7
8
# useradd git
# passwd git # 输入git密码
Changing password for user git.
New password:
BAD PASSWORD: it is WAY too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.

创建裸仓库

假设仓库名为gitserver.git

1
2
3
4
# su - git # 切换到git用户
$ cd ~git
$ mkdir gitserver.git; cd gitserver.git
$ git init --bare # 创建裸仓库

裸与普通仓库的区别是,裸仓库不放置具体代码,仅放置Git的信息,即裸仓库的根文件夹就是普通仓库的.git文件夹。

配置SSH连接

Git客户端可以为TortoiseGit,msysGit,本人使用Cygwin下自带的Git。请参考工具01:Cygwin的安装配置工具04:PuTTY的小伙伴PuTTYgen和Plink

开启Cygwin。先连接之前PuTTYgen生成的SSH的Key文件。

1
2
$ ln -s /cygdrive/e/putty.pem id_rsa
$ ln -s /cygdrive/e/putty.pub id_rsa.pub

将Key发送给服务器,过程中输入git密码。

1
2
3
4
5
6
7
8
9
$ ssh-copy-id git@192.168.80.6
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
git@192.168.80.6's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'git@192.168.80.6'"
and check to make sure that only the key(s) you wanted were added.

验证下是否可以免密码登录。

1
2
3
4
$ ssh git@192.168.80.6 # 无输入密码提示
[git@CentOS ~]$ exit
logout
Connection to 192.168.80.6 closed.

其他客户端也可类似配置PuTTYgen生成的key

clone仓库并操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ git clone git@192.168.80.6:gitserver
正克隆到 'gitserver'...
warning: 您似乎克隆了一个空版本库。
检查连接... 完成。
$ cd gitserver
$ mkdir 测试
$ echo hello测试 > 测试/测试文本.txt # 测试中文路径

$ git add .
$ git config user.name learnit
$ git config user.email "higoge(AT)gmail(DOT)com"

$ git commit -m "第一次提交"
[master(根提交) 8c3a846] 第一次提交
1 file changed, 1 insertion(+)
create mode 100644 测试/测试文本.txt

$ git push origin master
对象计数中: 4, 完成.
写入对象中: 100% (4/4), 295 bytes | 0 bytes/s, 完成.
Total 4 (delta 0), reused 0 (delta 0)
To git@192.168.80.6:gitserver
* [new branch] master -> master

服务器端查看

在CentOS6.6上操作本章。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ pwd
/home/git/gitserver.git

$ git log
commit 8c3a846e6b96abbd2cb22a097148f015101b0530
Author: learnit <higoge(AT)gmail(DOT)com>
Date: Wed Aug 4 19:53:53 2015 +0800

第一次提交

$ git show HEAD
commit 8c3a846e6b96abbd2cb22a097148f015101b0530
Author: learnit <higoge(AT)gmail(DOT)com>
Date: Wed Aug 4 19:53:53 2015 +0800

第一次提交

diff --git "a/\346\265\213\350\257\225/\346\265\213\350\257\225\346\226\207\346\
new file mode 100644
index 0000000..b47b693
--- /dev/null
+++ "b/\346\265\213\350\257\225/\346\265\213\350\257\225\346\226\207\346\234\254

@@ -0,0 +1 @@
+hello测试

发现中文路径名乱码。进行如下配置。

1
$ git config --global core.quotepath false

再次测试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ git show HEAD
commit 8c3a846e6b96abbd2cb22a097148f015101b0530
Author: learnit <higoge(AT)gmail(DOT)com>
Date: Wed Aug 4 19:53:53 2015 +0800

第一次提交

diff --git a/测试/测试文本.txt b/测试/测试文本.txt
new file mode 100644
index 0000000..b47b693
--- /dev/null
+++ b/测试/测试文本.txt
@@ -0,0 +1 @@
+hello测试

安全问题

git用户可以通过用户名密码进行访问是非常不安全的,建议禁止git用户远程Bash访问。
使用root修改/etc/passwd文件的用户git的信息。

1
2
#git:x:503:503::/home/git:/bin/bash
git:x:503:503::/home/git:/usr/bin/git-shell

git用户的默认shell改为git-shell
Cygwin测试如下。

1
2
3
4
$ ssh git@192.168.80.6
Last login: Wed Aug 4 20:06:59 2015 from 192.168.80.2
fatal: What do you think I am? A shell?
Connection to 192.168.80.6 closed.

服务器拒绝了远程登录。

但是,屏蔽了Bash后,无法使用ssh-copy-id进行Key的登记。

1
2
3
4
5
6
7
8
$ ssh-copy-id git@192.168.80.6
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
git@192.168.80.6's password:
fatal: unrecognized command '

umask 077 ;
mkdir -p .ssh && cat >> .ssh/authorized_keys || exit 1 ;
if type restorecon >/dev/null 2>&1 ; then restorecon -F .ssh .ssh/authorized_keys ; fi'

解决方法使用root用户手动修改~git/.ssh/authorized_keys,添加客户端的.pub信息。或在Cygwin下使用如下复杂的命令。

1
2
$ ssh root@192.168.80.6 'mkdir -p ~git/.ssh ; cat >> ~git/.ssh/authorized_keys ; chmod 700 ~git/.ssh; chmod 600 ~git/.ssh/authorized_keys; chown -R git:git ~git/.ssh' < ~/.ssh/id_rsa.pub
root@192.168.80.6's password:

解释下此命令:使用root登录服务器,执行单引号内的内容,首先建立~git/.ssh文件夹,将一些信息复制到~git/.ssh/authorized_keys的末尾,修改.ssh权限为700authorized_keys权限为600,因为是root创建,默认创建的文件夹和文件都是属于root用户,用chown修改文件夹及内部所有文件为git用户和组。刚才说的一些信息就是Cygwin下的~/.ssh/id_rsa.pub文件的内容。
之所以使用;而不用&&,是因为如果.ssh文件夹存在,mkdir命令会失败,使用&&后续的命令都将不执行直接返回错误。

~~ EOF ~~

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在Ubuntu搭建Git
版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 https://blog.csdn.net/chszs/article/details/48196657 在Ubuntu搭建Git 作者:chszs,版权所有,未经同意,不得转载。
602 0
怎么设置阿里云服务器安全组?阿里云安全组规则详细解说
阿里云服务器安全组设置规则分享,阿里云服务器安全组如何放行端口设置教程
8373 0
基于CentOS搭建 Git 服务
官方安装详细介绍 https://git-scm.com/download/linux 本文介绍通过源码安装 1、下载安装 git 此实验以 CentOS 7.2 x64 的系统为环境,搭建 git 服务器。
1378 0
git 本地与服务器的同步
如果在服务器上直接用 git init 则会自动在当前目录创建.git目录但在本地clone后修改后,不能push,这是由于git默认拒绝了push操作,需要进行设置,修改.git/config添加如下代码: [receive] denyCurrentBranch = ignore 在初始化远程仓库时最好使用 git --bare init 需首先手工创建.
790 0
使用OpenApi弹性释放和设置云服务器ECS释放
云服务器ECS的一个重要特性就是按需创建资源。您可以在业务高峰期按需弹性的自定义规则进行资源创建,在完成业务计算的时候释放资源。本篇将提供几个Tips帮助您更加容易和自动化的完成云服务器的释放和弹性设置。
11853 0
Windows环境下Git环境的搭建
书看了一段时间,是时候开始维护自己的个人资料了。正所谓工欲善其事必先利其器,开发先从环境搭建开始。而环境搭建先从自己的GitHub账号搞起。 首先,任何Git初学者应该先看一下廖雪峰老师的教程,这点非常重要!!! 1.先去官网下载一个Git for Windows的安装包,安装完成。
1014 0
+关注
jeremy_wong
本博客全部转自我的个人博客,http://higoge.github.io,上面的文章更全。 联系我请发邮件到higoge@gmail.com或微博 @挨踢汪汪
66
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载