Git服务搭建及SSH密钥使用过程中遇到的坑

这是写给公司同事的教程,录于此,或许对别人也有点用处。

==》CentOs7安装git
     采用#yum install git      #git --version
     增加一个用户#useradd --home /home/gitusr gitusr
     此后可su到gitusr用户下进行操作:在home下建一个gitrepo目录,然后再建一个dbk-svr.git目录
     在其下执行>git init --bare
     这样就建了一个裸仓库(没有工作区的仓库,因为服务端不需要改动代码,只接收各客户端的改动,相当于一个中转站)
 
==》windows客户端(克隆及上传项目代码)
      安装git for windows,安装tortoiseGit(TortoiseGit-xxxx-64bit.msi)
 
     克隆远程代码(适用于代码已存在于远程服务器端):
     右键Git Clone,远程地址:gitusr@远程服务器地址(域名):/home/gitusr/gitrepo/dbk-svr.git
     如果在此过程中要求输入密码,则输入密码:xxxx(如果使用密钥,则不需输入密码,见后文)
 
     使用密钥对来增强安全性,并且免去输密码的麻烦:
     使用TortoiseGit的PuttyGen程序,生成一个密钥对,保存私钥为ppk文件。同时在生成的界面中将public key 字串复制出来,发给服务器管理员。
     如果有私钥,并且已在服务器设置好了公钥的话,请勾选Load Putty Key并且选择ppk文件,这样就会把远程的项目复制下来。
   
     上传代码在客户端也可以: 
     在项目目录下右键 Git create reposition here,把要同步的文件加入,然后commit,接着push(适用于项目原始代码在本机)
     这时remote url为: gitusr@远程服务器地址(域名) :/home/gitusr/gitrepo/dbk-android.git
     使用密钥的方法同上。
     这样就可以把本地代码上传到远程了。
 
==》服务端和客户端的密钥设置注意
      为了增强安全性,并且省去每次输密码的麻烦,是在服务器主机上建立一个 git 账户,让每个需要写权限的人发送一个 SSH 公钥,然后将其加入 git 账户的~/.ssh/authorized_keys 文件。这样一来,所有人都将通过 git 账户访问主机。这丝毫不会影响提交的数据 — 访问主机用的身份不会影响提交对象的提交者信息。
     采用这种办法,比如说账户名字叫gitusr
     在客户端使用TortoiseGit的PuttyGen程序,生成一个密钥对,保存私钥为ppk文件。同时在生成的界面中将public key 复制出来(一定要复制出来,虽然这个公钥也存在ppk文件中,但是莫名其妙的会分行,如果复制ppk文件中的,貌似会有问题)。然后在服务器的gitusr的home下,建立.ssh文件夹,建立authorized_keys文件,并且把各个客户端的公钥串拷到此文件的末尾。
     然后在TortoiseGit端,有两个地方可以加载前面生成的ppk文件,一个是在clone一个项目的时候,选择load putty key,一个是在setting的remote下,有一个putty的标签,选择生成的ppk文件即可。
     这样的效果,就是各客户端在pull或push时,不用再输入gitusr的用户名和密码了。
     这个过程有几个坑:一是authorized_keys文件中的内容,windows下存的文件中拷过去会有问题(折行或者是前后的字串),总之要从界面考过去,否则ssh不认;还有就是.ssh目录和authorized_keys文件的权限,不能让除本用户之外其他任何用户有写权限,否则sshd也不认。
     ~/.ssh/authorized_keys
     Lists the public keys (DSA/ECDSA/RSA) that can be used for logging in as this user.  The format of this file is described above.  The content of the file is not highly sensitive, but the recommended   permissions are read/write for the user, and not accessible by others.
     If this file, the ~/.ssh directory, or the user's home directory are writable by other users, then the  file could be modified or replaced by nauthorized users.  In this case, sshd will not allow it to be used unless the StrictModes option has been set to “no”.
      其实这个不仅仅是使用Git的问题,对于一切ssh访问密钥来说,都是如此。

猜你喜欢

转载自oldbig.iteye.com/blog/2284620