使用现有云服务器搭建自己的远程git服务器
最近弄个代码,由于不想整个的来回拷贝,所以想整个中转站。想起还有个半吃灰的云服,所以废物利用,做个远程git仓库做个中转,就不用带着U盘来回跑了。
想要完成该文章的内容,首先需要一台服务器和一台电脑,或者两台电脑,或者一台电脑一台虚拟机。
我的设备:Manjaro、centos云服
服务端
云服务器就不在此推荐,云服的设置网络上有很多经典的详细的帖子就不多做分享。
首先我们需要在服务端进行配置:
- 在服务端安装git,可以去官网查找安装方式:
sudo pacman -S git
sudo apt-get install git #Ubuntu
- (可选)配置git名称和信息:
git config --global user.name username
git config --global user.email useremail
- 我们不使用root用户或者其他用户创建git仓库,所以我们创建一个用户并根据提示设置两遍密码:
sudo adduser git
passwd git
- (可选)将我们创建的用户添加sudo权限:
sudo -s
chmod u+w /etc/sudoers#添加sudo文件的可写权限
vi /etc/sudoers
chmod u-w /etc/sudoers#撤销权限
在sudoers文件中,添加内容:
git ALL=(ALL) NOPASSWD:ALL
#NOPASSWD可以免密码登录root,可选
- 启用密码登录(因为我们需要将公钥上传到服务器上,禁用之后无法登录)
sudo vim /etc/ssh/sshd_config
在配置文件中找到PasswordAuthentication并修改为yes:
PasswordAuthentication yes
默认是yes,如果你没有更改过的话。若是没有该选项,手动添加即可。
最后需要重启ssh服务:
sudo systemctl restart sshd
- 创建一个git仓库,我将仓库创建 git用户下的git文件夹下面:
首先创建并进入该文件夹
cd ~
mkdir git
cd git
然后init一个Git仓库:
sudo git init --bare orderpod.git#名字随意
Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。
- 更改git仓库的所有者
sudo chown -R git:git orderpod.git
客户端
首先我们可以测试一下可不可以ssh到服务端:
ssh git@remoteip#替换成你的ip
这里我使用的win的git bash测试,结果是一样的。
图片上半部分是我们启用密码登录的结果,第一次登陆会提示是否创建host写入yes即可,然后输入用户密码,服务端设置的密码即可登录。
图片下半部分是禁用密码登录,会提示权限拒绝字样。此时你禁用了密码登录,需要登录其他用户编辑 ssh配置文件,如果别的用户无法ssh,恭喜你,重装吧!(一定要万事俱备再去禁用密码登录,不然凉凉)
- 我们需要在客户端创建一份密钥,客户端不能是服务端,这是保密协议的通用做法。
ssh-keygen -t rsa
生成秘钥会让你选择路径,填写密码等,为了方便,直接回车,当然你也可以填写相应的密码。
默认的生成的路径是~/.ssh/,windows下的路径是C:\Users\Administrator.ssh。
其中.pub的文件是公钥,我们需要上传到服务器,另外一个是私钥,我们需要保存好。
- 使用scp命令将公钥上传到服务器:
scp命令比cp更加强大,其使用可见,在bash中键入命令后输入git用户密码即可:
scp .ssh/id_rsa.pub git@remoteip:/home/git/.ssh
- 在服务器上将公钥保存在/home/git/.ssh/authorized_keys中,没有就创建一个文件:
(1)登录用户,见本节始。
(2)执行命令将scp的文件中的内容完整的复制到authorized_keys中,若是有多个,手动复制每一个公钥内容占据一行。
cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
- 修改.ssh以及authorized_key文件的权限:
chown -R git:git ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
- 如果顺利的话,现在可以禁用密码登录了,步骤在上节,为保险,先进行测试。
退出用户后进行登录测试:
此刻我们可以直接ssh登录而不用输入密码。如果你将客户端的密钥文件移除,会提示你权限拒绝的字样。
将密钥放回.ssh文件夹,可以直接登录用户不用输入密码。
最后,更改设置,禁用密码登录。
git测试
到这里,基本上已经创建完成了,进行一轮基本的测试:
在客户端先克隆一下:
git clone git@remoteip:/home/git/git/....git
这个时候是空仓库,随便touch个文件后提交:
cd ...
touch 1.txt
git add .
git status
git commit -m "test"
git push
成功!
参考链接:搭建Git服务器