这是写给公司同事的教程,录于此,或许对别人也有点用处。
?
==》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访问密钥来说,都是如此。
Git服务搭建及SSH密钥使用过程中遇到的坑
原文:http://oldbig.iteye.com/blog/2284620