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`
Ubuntu部署Git服务器_第1张图片
禁止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== [email protected]
# 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 [email protected] -P 113,默认的会带端口号 22

  • git clone指定端口
# 指定服务器的`git`用户访问的端口 [port]
# ssh://用户名@主机IP(或域名):端口号/git目录地址 
$ git clone ssh://[email protected]:[port]/gitolite-admin
  • 本地修改 HEAD
# 修改 .git 的配置,就可以配置
$ vim .git/refs/remotes/origin/HEAD 
Ubuntu部署Git服务器_第2张图片
本地项目`HEAD`.png
  • 修改服务器上的HEAD
# 只要是客户端 `clone` 的都会默认切换到 `HEAD` 的分支
Ubuntu部署Git服务器_第3张图片
image.png
  • 修改git push /git pull 默认分支文当前分支
$ git config push.default "current" # 可以设置全局,增加:`--global` 参数
$ git config pull.default "current"

你可能感兴趣的:(Ubuntu部署Git服务器)