美文网首页
Ubuntu部署Git服务器

Ubuntu部署Git服务器

作者: 赶时间的闹钟 | 来源:发表于2018-08-18 11:06 被阅读22次

    小子这里有两台机器: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"
    

    相关文章

      网友评论

          本文标题:Ubuntu部署Git服务器

          本文链接:https://www.haomeiwen.com/subject/zmttiftx.html