Ubuntu部署Git服务器

小子这里有两台机器:Mac笔记本和一台国外的远程服务器,所有的操作都是在Mac笔记本上操作的,ssh连接国外服务器,并且把git 服务器创建在国外服务器上面

一 使用ssh连接远程服务器

小子是在网上购买的服务器,起初的意思就是安装 Shadowsocks Server 分享给小子的一个朋友使用Google,毕竟小伙伴们都是开发者(穷),有东西就要分享

  • 在网站上都买服务器后安装ssh server,并配置开机启动该服务
    小子的服务器在系统安装(ubuntu)的时候默认安装了ssh client,所以需要手动安装server
  • 配置22端口
  • 配置了免密登录
  • Mac直接使用ssh登录服务器

二 新建系统用户git

我们一开始登录的用户是root,所以我们拥有服务器至高无上的权利(小子也是刚深有体验)!这里小子在搭建的时候也是非常意外,原来所谓的 git 服务器就是在服务器上面新建一个系统用户git,其实这个git可以改成其它的名字的,这里小子为了符合大众的胃口,就新建了系统用户git

$ adduser git # 除了输入密码和确认密码,一律回车吧

# 如果新建错了可以使用下面的指令进行删除用户
# $ userdel git

三 在系统目录新建一个可读可写的目录

小子当前设置的可读可写的目录在于系统目录下的 /opt/git,因为在/opt下新建目录需要系统权限,所以小子就切换到系统用户root

$ su  # 如果从用户`git`切换到用户`root`,需要输入`root`密码,反之,则不需要
# $ su git # 这个可以切换到`git`用户
$ mkdir project.git
$ cd project.git
$ git init --bare # `--bare` 为新建一个空的仓库
# 新建完毕后,大家可以 `$ ls` 看一下目录
$ chmod -Rf 777 /opt/git # 我也是不得已才 777 的

如果配置了22端口,则我们已经可以使用ssh来提交我们的仓库代码了

# 在 Mac 本地
# 这里是新建一个本地仓库
$ cd ~/Desktop/
$ mkdir tmp
$ cd tmp
$ mkdit myproject
$ cd myproject
& git init
$ touch test.txt
$ git add .
$ git commit -m "Init commit"
$ git config --global user.name "你的名字" # 如果你还没有配置的话
$ git config --global user.email "你的邮箱" # 如果你还没有配置的话
$ git remote add origin git@[你的IP]:/opt/git/project.git
$ git push --set-upstream origin master # origin 对应的就是上面的`origin`
# 使用 ssh 方法部分,可以完结了

三 配置ssh公钥登录

是不是使用git命令时是不是经常需要输入密码?那就配置ssh公钥吧!这里需要知道的是,如果只通过ssh公钥访问的话,就不需要让其他的git仓库的使用者知道服务器git用户的密码,也就很好地保护了我们的服务器

$ su git # 切换到用户`git`
$ cd ~/
$ mkdir .ssh && chmod 700 .ssh 
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys # 新建保存`ssh`公钥的文件
# 接下来就是把我们电脑的`ssh`公钥拷贝过来就行了

四 配置git用户的git-shell以防止终端ssh登录【可选】

安装git工具时,自带了一个git-shell以防止有git操作之外的动作,也就是使得使用 $ ssh git@ip... 的方式远程连接时,将打开的是git-shell的终端,而这个终端可以阻止git push / git clone ...操作动作外的指令

$ su
$ cat /etc/shells # 查看所有的 `shell` 终端,如果没有 `git-shell` 的话,需要把路径配置进去
$ which git-shell # 查看`git-shell`的路径
$ chsh git # 为用户`git`设置终端,默认是`/bin/bash`
禁止ssh登录git用户.png

Tips

  • 生成ssh公钥秘钥
$ ssh-keygen # 可以选择性输入信息,不想输入就回车
  • 查看自己电脑的已有的ssh公钥
$ cd ~/.ssh
$ ls # .pub 就是
authorized_keys2  id_dsa       known_hosts
config            id_dsa.pub
$ cat ~/.ssh/id_rsa.pub
ssh-rsa 
...
NrRFi9wrf+M7Q== xxx@mac.local
# balabala一大串
  • 把自己电脑的ssh公钥添加到服务器的authorized_keys中,实现免密登录
$ cat .ssh/id_rsa.pub | ssh username@ip 'cat >> .ssh/authorized_keys' # 将`cat`的内容上传到服务器`ip`的用户`username`的`authorized_keys`文件中

# 或者,当然了,也有手动挡
$ cat .ssh/id_rsa.pub
# 接着`copy,past`到`authorized_keys`文件中
  • 修改服务(所有用户)对外的ssh端口

一般我们访问网页的时候,端口都是22,而小子的服务器安装完系统后,端口却不是22的,所以需要配置,否则,每次登陆或者git拉取时,都需要指定端口(当然,也可以本地做修改,服务器修改的成本要低得多,但是为了安全,也可以不使用22端口)

执行$ ls /etc/ssh 可以看到目录下有:ssh_config和sshd_config(小子也安装ssh server)都是ssh服务器的配置文件

# 直接就是指令
$ vim /etc/ssh/ssh_config
# 然后把`#    Port 22`给打开就行了,这样,小子的mac访问服务时时就不用指定端口了
# 缩进代表代码块,大小写不敏感

# 但小子在`ssh_config`后面增加了一个端口`10086`,然后`/etc/init.d/ssh restart`后,使用端口`10086`登录失败!
# 后来吧,小子直接修改了`sshd_config`增加了端口`10086`,然后重启`ssh`然后就可以使用端口`10086`进行登录
  • ssh 指定端口连接
$ ssh -p 22 usr@ip
  • 开启服务端ssh server
# 设置`ssh server`的监听端口
$  /etc/ssh/sshd_config # 设置 Port 的值,或者直接增加一行 Port

# 启动
sudo/etc/init.d/ssh start

# 重启
$ systemctl restart sshd.service

# 查看
$ netstat  -anp | grep sh
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1537/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      1537/sshd
unix  2      [ ACC ]     STREAM     LISTENING     9851     1/init              /run/systemd/fsck.progress
unix  3      [ ]         STREAM     CONNECTED     16498    1537/sshdy

# 开机启动
# 打开/etc/rc.local文件,在exit 0语句前加入:
/etc/init.d/ssh start

  • 清除ssh公钥

清除某个 IP 对应的 SSH key
$ ssh-keygen -R 192.168.1.203(你远程服务器的IP)
但是无法删除带端口号的IP(非22):ssh root@192.168.1.203 -P 113,默认的会带端口号 22

  • git clone指定端口
# 指定服务器的`git`用户访问的端口 [port]
# ssh://用户名@主机IP(或域名):端口号/git目录地址 
$ git clone ssh://git@mydomain.com:[port]/gitolite-admin
  • 本地修改 HEAD
# 修改 .git 的配置,就可以配置
$ vim .git/refs/remotes/origin/HEAD 
本地项目`HEAD`.png
  • 修改服务器上的HEAD
# 只要是客户端 `clone` 的都会默认切换到 `HEAD` 的分支
image.png
  • 修改git push /git pull 默认分支文当前分支
$ git config push.default "current" # 可以设置全局,增加:`--global` 参数
$ git config pull.default "current"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353