Ubuntu部署Git服务器
小子这里有两台机器:Mac笔记本和一台国外的远程服务器,所有的操作都是在Mac笔记本上操作的,
ssh
连接国外服务器,并且把git
服务器创建在国外服务器上面
一 使用ssh
连接远程服务器
小子是在网上购买的服务器,起初的意思就是安装
Shadowsocks Server
分享给小子的一个朋友使用
- 在网站上都买服务器后安装
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"