一、安装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