遠い声と想像

エイジ オブ ディスカバリー II


Keiner außer dem einsamen Herzen.



Home Picture ©


ubuntu服务器端安装Git仓库



一、安装git

SSH登录到服务器,一般使用PuTTY
查看是否安装 git :

$ git --version 

$ sudo apt-get update
$ sudo apt-get install git   

二、创建git账户及密码

安装 git 后,创建一个名为 git 的账户给 git 使用

$ sudo useradd -m git
$ sudo passwd git

-m 参数在创建用户的同时创建用户的家目录( /home/git )。

三、限制 git 账号的 ssh 连接只能是登录 git-shell

为了安全考虑,创建的 git 用户不允许登录服务器主机的 shell (可以执行包括 git 在内的其他操作),需要设置限制 git 账号的 ssh 连接只能是登录 git-shell (只可以执行 git 相关的操作)。

第一步:查找 git-shell 的安装位置

$ which git-shell

这里的 git 是通过 apt-get install git 安装的,输出 git-shell 的目录是 /usr/bin/git-shell 。(如果 git 是通过编译安装的,输出的 git-shell 目录可能是/home/ubuntu/bin/git-shell 。)

第二步:修改/etc/passwd文件

使用 vim (未安装需要先安装 sudo apt-get install vim )编辑 /etc/passwd 文件:

$ sudo vim /etc/passwd

将最后一行关于 git 的登录 shell 配置改为 git-shell 的目录(原来可能为空或为 /bin/bash ):

git:\x:1000:1000::/home/git:/usr/bin/git-shell

注意将 /usr/bin/git-shell 为第一步用 which git-shell 找到的目录。

四、初始化git仓库并配置用户权限

第一步:创建目录,用于存放 git 仓库

$ sudo mkdir -p /mydata/repositories

-p 参数建立一个绝对路径目录,不管之前data目录是否存在。

第二步:创建完成后,初始化这个仓库

使用 –bare 会创建一个裸仓库,裸仓库没有工作区,因为服务器上的 git 仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的 git 仓库通常都以 .git 结尾。此处创建一个名为 test 的仓库。

$ cd /mydata/repositories
$ sudo git init --bare test.git

第三步:配置用户权限

为了安全考虑,需要给 git 仓库目录设置用户和用户组(这里都设置为 git )并设置权限。

$ sudo chown -R git:git /mydata/repositories
$ sudo chmod 775 /mydata/repositories

-R 表示递归修改所有子目录所属分组。

775 表示权限,Linux下文件/文件夹权限分为三种,文件拥有者权限、文件所属组成员权限、以及其他人的权限。 775 三位分别对应这三种权限。每一位中,4表示可读,2表示可写,1表示可执行(文件夹的话表示可进入),最后相加的和表示权限集合。这里我们设置为组目录以及子目录的权限为775表示拥有者可读、可写、可执行;所属组成员可读、可写、可执行;其他人可读、可执行,但是不可写。 注意:因为第一次设置用户和用户组并设置权限。以后每次

$ cd /mydata/repositories
$ sudo git init --bare xxx.git 

创建一个裸仓库后,都要执行以上命令,给 git 仓库设置用户和用户组并设置权限。不然会报错:

….. remote: error: insufficient permission for adding an object to repository database ./objects ……

查看 git 仓库的用户权限:

 $ ls -la 

五、创建ssh密钥登录

设置基于 ssh 密钥的身份验证,可以在不输入密码的情况下连接 Linux 服务器。如果只执行 $ git clone ,这一步设置不是必须的,可以通过输入服务器密码登录。 如果需要执行 $ git push ,这一步是必须的,只有配置好本地和服务器的 SSH 后,才有权限向服务器上自己的项目提交代码。

设置 .ssh 目录和秘钥文件权限

除了文件所有者外,其他用户不可读、写、执行 .ssh 目录及目录中的 authorized_keys。

这也很好理解,如果其他用户有了 .ssh 目录或目录下的 authorized_keys 读写权限。

把自己生成的公钥添加进远程主机上的 authorized_keys 文件中,就可以通过 ssh 登录连接。

为了安全,需要执行以下命令:

$ cd /home/git
$ sudo mkdir .ssh && sudo chmod 700 .ssh
$ sudo touch .ssh/authorized_keys && sudo chmod 600 .ssh/authorized_keys
$ sudo vim .ssh/authorized_keys  # 添加公钥

收集所有需要登录的用户的公钥,即用户们的 id_rsa.pub 文件。本地机器安装git后,一般公钥放在 c:\用户\用户名.ssh下。用记事本打开,公钥就是一段字符串,把所有公钥导入到服务器的 /home/git/.ssh/authorized_keys 文件里,一行一个。

六、测试Git 使用SSH登录

在本地操作系统下

$ git -T git@服务器ip或地址

默认SSH端口为22,大多数情况下,为了安全起见,都会更改ssh端口,git就会被拒绝。如果不是用22端口连接,git 的地址要采用:

ssh://git@severip:port/mydata/repositories/test.git

克隆命令:

$ git clone ssh://git@severip:port/mydata/repositories/test.git

设置remote origin 时

$ git remote add origin ssh://git@severip:port/mydata/repositories/test.git

七、本地代码推送到远程仓库

第一次推送,在本地做过init的仓库运行git

$ git add .   // 添加文件到版本库(只是添加到缓存区),.代表添加文件夹下所有文件    
$ git commit -m "first commit" // 把添加的文件提交到版本库,并填写提交备注    
$ git remote add origin 你的远程库地址  // 把本地库与远程库关联    
$ git push -u origin master    // 第一次推送时    
$ git push origin master  // 第一次推送后,直接使用该命令即可推送修改    

执行此命令会要求输入密码,验证通过后即开始上传。

$ git status -s

查看git状态,有更新修改则可以add后push

 

Next:         HUGO模板上下篇设为同频道的文章   (2023-02-19)