安装git
sudo apt-get update
sudo apt-get install git -y
创建一个git用户并建立一个 .ssh
目录和验证文件:
sudo adduser git
su git
cd
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys # ssh用户验证
然后将ssh公钥添加到authorized_keys文件中,一行一个
配置用户登陆权限
公钥添加成功后,用户可以通过ssh直接登陆git用户的shell,为了防止这个问题,我们需要限制git用户登陆
git提供了一个名为git-shell
的工具,你可以方便地将用户 git
的活动限制在与 Git 相关的范围内。
如果将 git-shell
设置为用户 git
的登录 shell(login shell), 那么该用户便不能获得此服务器的普通 shell 访问权限。 若要使用 git-shell
,需要用它替换掉 bash 或 csh,使其成为该用户的登录 shell。 为进行上述操作,首先你必须确保 git-shell
的完整路径名已存在于 /etc/shells
文件中:
cat /etc/shells # 查看列表
which git-shell # 检测git-shell安装
sudo -e /etc/shells # 将上面的结果添加到这里的末尾
现在你可以使用 chsh <username> -s <shell>
命令修改任git用户的 shell:
sudo chsh git -s $(which git-shell)
这样,用户 git
就只能利用 SSH 连接对 Git 仓库进行推送和拉取操作,而不能登录机器并取得普通 shell。
su git # 尝试进入git用户shell
或
ssh git@yourserver
显示下面 内容表示成功
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
注意,这样只是禁止了git用户的shell访问,并不会阻止访问git相关的服务
添加项目
创建一个空目录作为git服务器的根路径:
sudo mkdir /git
授予git用户所有权
sudo chown -R git:git /git
从服务器上创建空项目仓库
cd /git
mkdir yourprojectname.git
cd yourprojectname.git
git init --bare
# Initialized empty Git repository in /git/yourprojectname.git/
本地项目创建空项目仓库
git clone --bare my_project_apth my_project_apth.git
这样会在当前路径创建一个 my_project_apth.git的空仓库
然后将这个仓库上传到服务器
scp -r my_project_path.git root@gitserver:/git/
注意使用非root用户上传可能需要授予可写权限
上传本地代码
cd my_project_path
git init
git add .
git commit -m 'initial commit'
git remote add origin git@gitserver:/git/yourprojectname.git #刚才的git地址
git push origin master
测试:
git clone git@gitserver:/git/yourprojectname.git
or
git pull git@gitserver:/git/yourprojectname.git