现在的位置: 首页 > 综合 > 正文

SVN+SSH 服務器創建及客戶端配置.(ubuntu 12.04)

2018年02月07日 ⁄ 综合 ⁄ 共 2562字 ⁄ 字号 评论关闭

先说怎么安装吧,然后再说这种服务器的安全性.约定,以下所有命令如果提示无权限请在最前面添加 sudo空格

1.安装必要的一些软件.

  $apt-get install subversion openssh-server

2.创建代码库.

//创建两个用户 svnuser1,svnuser2

  $adduser svnuser1
  $adduser svnuser2

//创建用户组. svnuser

  $addgroup svnuser

//将svnuser1 svnuser2 加入 用户组svnuser

  $addgroup svnuser1 svnuser
  $addgroup svnuser2 svnuser
  $mkdir /svnres/project1
  $svnadmin create /svnres/project1
  $chown -R root:svnuser /svnres/project1
  $chmod -R o-rx /svnres/project1 //此句是禁目除 svnuser 组以外的人访问代码仓.

通过以上的操作,名为project1的代码仓就已经创建好了

3.加入代码到代码仓.有很多方法.下面只讲在服务器上面添加的一种简单方法.

   这里假设你的代码放在 /project1 目录下面
$svn import  -m  "一些注释信息"  /project1 file:///svnres/project1

这里完成了添加代码进代码仓.

这里还有一点要注意的就是用户权限.

我们需要的是 svnuser 组的用户都可以读写代码仓.

所以还需要做一件事 .

$chmod g+w /svnres/project1/db/rep-cache.db
文件<span style="font-family: Arial, Helvetica, sans-serif;">/svnres/project1/db/rep-cache.db 在svnadmin create后是不存在的,往代码仓增代码后,此文件才会出现.</span>

到这一步,svn 代码仓已经建好了

4.下面导出密钥KEY给客户端使用.

 切换到svnuser1 和svnuser2用户.

分别执行 ssh-keygen -t rsa -b 1024 -f svnuser.key

这过程可以输入密码也可以不输入密码 .

执行后会产生两个文件

svnuser.key.pub svnuser.key

其中文件 svnuser.key是给终端使用的.

执行以下命令

mkdir ~/.ssh
mv svnuser.key ~/.ssh/authorized_keys 

这里需要注意文件名必须为 authorized_keys

想办法把 svnuser.key文件复制到终端系统.

=======================================================

下面介绍客户端的使用 .

由于我只在windows下面使用 vs2008,所以就不介绍别的工具具体使用 .

vs2008要加入svn支持的话,需要下载此三个软件.

AnkhSvn   putty.zip(包含 putty.exe PAGEANT.exe PUTTYGEN.EXE等一些工具)   TortoiseSVN

安装好以上三个软件.

执行 PAGEANT.exe 文件,点 Load,选中刚才产生的svnuser.key文件 .

然后可能要输入密码,请输入在执行 ssh-keygen命令时,输入的密码.

然后点  save private key.,这里保存为 svnuser.ppk

执行putty.exe
新建一个session,输入名字(例如svn),在host name填对应的svn服务器地址(假设为svnuser1@服务器IP 或者 svnuser2@服务器IP,如果只填IP的话,后面在访问SVN的时候,会提示输入用户名),端口默认22,在connection--ssh--auth里面,选择自己刚生成的putty对应格式的私钥

然后保存此 session

执行 PAGEANT.EXE,双击系统托盘程序图标,在弹出的窗口点add key,选中先前产生的.ppk文件,然后关闭窗口即可.

下面说TortoiseSVN的使用.

网上说需要在setting->network里面做设定,其实这一步是多余的.TortoiseSVN安装后不做任何修改就可以使用的.

比如需要从 服务器checkout code,

鼠标右键 ->check out->url位置填 svn+ssh://svn/svnres/project1 即可.

这里有需要注意的 svn 这个名字必须与putty配置中的 session名字相同.(这是必须的).

url 的格式为 svn+ssh://svn/后面跟代码仓库的绝对PATH.,比如当前Demo介绍 代码仓在 /svnres/project1

AnkhSvn的使用url,也是同上,具体使用,请google .

总结,上面在服务器上面创建了两个用户分别是 svnuser1 svnuser2

这两个用户有各自的key文件和用户名,所在putty配置的hostname那里 username@ip,需要根据实际情况修改.

他们都可以读写仓库仓里面的数据.如果有新的用户需要访问这个代码仓,只需要将他的用户加入svnuser用户组即可.更多的项目类似做法.

如果不想让svnuser2 读写这个项目,只需要执行 delgorup svnuser2 svnuser 即可.

日志也会记录是svnuser1还是svnuser2做的修改.

下面说下安全性.

大家看到这里,有没有想到一个安全性的问题.做为程序员,严密的逻辑还是需要的.

既然我们给了key给TEAM中的人员,他们使用对应的 KEY,可以通过putty直接就ssh到服务器.

如果他稍微聪明点,就知道我们的code里放在哪个位置在.

拿本例来说.

rm -rf /svnres/project1  后果会怎么样??????????????????

这样的问题该如何解决.

也许有人会想到 

chown root:root /svnres

这样 svnuser组用户无法删除/svnres/project1目录(因为他只有读的权限).

那执行 rm -rf /svnres/project1/* 呢

网上有人说可以加 a 属性,就只可以写不可以删.

但加了这个权限后,客户端无法commit.说权限不够.所以此方法行不通.

抱歉!评论已关闭.