关闭

如何在Linux实现Subclipse访问svn+ssh协议的Repository

标签: sshsvnlinux服务器windows
6566人阅读 评论(0) 收藏 举报
svn+ssh原理简介

网上大多数的文章都是在介绍如何在windows环境下配置Subclipse,使用之能访问svn+ssh协议的Reposiotry,这里介绍一下在linux环境下如何实现。
简单地说,svn+ssh是以ssh通道建立SVN通信的。一般搭建svn+ssh类型的repository,都是在Linux服务器上通过ssh-keygen生成两把钥匙,一把公钥,一把私钥,公钥放置在服务器端,私钥放在客户端,持有私钥的客户端用户通过ssh通道,向服务器发出连接请求,服务器要求输入linux系统用户的密码短语(passphrase),如果用户密码短语正确,再检验用户手上的私钥和服务器上的公钥是否配对,如果配对,就通过请求;否则提示错,拒绝用户请求。关于如何在Linux服务器上搭建SVN+SSH协议的Reposiotry,请参考:http://jimmyg.org/blog/2007/subversion-over-svnssh-on-debian.html ,该文给出出非常详细的说明。

导入密钥,登录ssh主机


下面,我们越过服务器的密钥生成和配置工作,专注地看一下linux客户端如何使用Subclipse访问svn+ssh主机。

作为一般的开发人员,如果你的团队使用svn+ssh协议搭建Reposiotry,那么,当你加入团队准备开发时,一定会有人发给你一个私钥文件和一个密码短语(passphrase),这里插句题外话,使用ssh-keygen和putty可以生成一对密钥:公钥和私钥,有时候这两种密钥的使用方经常会被弄混,我们可以这样理解:谁想访问远程主机谁负责创建密钥,这样才是安全可靠做法对吧?那好,此时私钥,公钥就区分出来了,自己留下的就是私钥,分发给远程主机的就是公钥了。再次简单总结就是:谁想访问对方,谁创建密钥,私钥自留,公钥给对方!这也是为什么一般一台机器只有一个私钥的原因,因为一个私钥就足够了,想访问哪个主机,就把公钥拷贝到哪个主机上,本机只用那一个私钥。 对于私钥文件,可能是有两种格式,你必须知道你手上的是哪一个格式,这两种格式是分别是:


1. 以.ppk结尾的putty格式的私钥文件(putty private key),这是一种文本文件,其内容大概如下:





2. 另一种也是纯文本文件,无固定后缀名,一般是.txt或是无后缀,这是服务器端使用openssh生成的原始的openssh格式的私钥文件,其内容大概如下:




在linux环境下,如里你得到私钥文件是后者,那么可以直接在linux下使用,如果你得到的是前者,一个ppk文件,那么你需要使用putty将其转换为openssh格式,转换方法非常简单:打开puttygen.exe -> conversations -> import key -> 选中你的ppk文件后回到主窗口 -> conversations -> export OpenSSH key 即可。

假定我们已经拿到了或是转换好了openssh格式的私钥,接下来,我们来看如何使用这个文件登录ssh主机。假如你的账号是user,目录主机是svn.abc.com,使用ssh命令,我们可以用两种方式登录:


方式一:显示地使用 -i 参数指定私钥文件:


ssh -i /path/to/private-key/ user@svn.abc.com


中途提示passphase,输入passphase即可。


方式二:ssh默认会自动从用户home目录下的.ssh文件夹下搜索私钥文件,因此,更为方便的做法是将私钥文件放到.ssh文件夹下。(如果你的home文件夹下没有.ssh文件夹,请先通过mkdir ~/.ssh创建)。放置在.ssh文件夹的私钥文件的命名也是有规定的,查看ssh命令说明,我们看到主要的私钥文件按加密方式规定了默认文件名:
     ~/.ssh/identity
     ~/.ssh/id_dsa
     ~/.ssh/id_ecdsa
     ~/.ssh/id_rsa
             Contains the private key for authentication.  These files contain sensitive data and should be readable
             by the user but not accessible by others (read/write/execute).  ssh will simply ignore a private key
             file if it is accessible by others.  It is possible to specify a passphrase when generating the key
             which will be used to encrypt the sensitive part of this file using 3DES.
假如我们得到的私钥是使用rsa加密的,使用如下命令将密钥拷贝到指定位置:

scp /path/to/private-key/ ~/.ssh/id_rsa

复制完成后,直接使用:


ssh user@svn.abc.com


看能否登录,如果功能登录表示私钥已经放置到正确位置。如果出现问题,可以追加参数 -vvv 查看日志。

配置subclipse,使之能够访问svn+ssh的Repository

这一步非常简单,和windows上的做法一样,并不需要subclipse做任何配置,只要添加一个环境变量:SVN_SSH就可以了,但是和网上一些文章所提到的只需要将SVN_SSH设定为一个指定私钥文件的ssh命令,如:
export SVN_SSH="ssh -i /path/to/private-key/
不同的是,在我的环境下,必须设定登录用户名和主机才有效,即,我的SVN_SSH是这个样子:

export SVN_SSH="ssh user@svn.abc.com"

没有显示指定私钥文件是因为它已放置到默认位置。

SVN_SSH环境设置好以后,重新登录系统,打开eclipse,使用subclipse新建svn+ssh类型的repository就可以访问了。

使用ssh-agent和ssh-add缓存密码短语passphrase

使用subclipse成功访问vn+ssh类型的repository后,一个问题就是每次操作都需要输入passphrase,非常繁琐。在windows下,可以使用putty的pageant缓存passphrase,在windows下,使用的是ssh-agent和ssh-add

首先执行:

$ ssh-agent
然后再执行:
$ ssh-add
系统会提示你为指定的私钥输入passphase,输入后,再使用subcipse进行检出/入时就不会再要求输入passphrase了。


8
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

SVN+SSH协议工作方式全解析,以Sourceforge为例讲解如何在Windows下配置TortoiseSVN和Subclipse访问SVN+SSH协议的Repository

简单地说,SVN+SSH (SVN over SSH) 协议的工作方式就是在SVN客户端与服务器端先建立一个SSH连接,然后通过SSH连接推送命令和传输数据,从而借助SSH实现更加安全的SVN通信。使...
  • bluishglc
  • bluishglc
  • 2013-03-22 13:40
  • 23340

SmartGit的安装和使用

一、SmartGit是什么?   相信各位在Linux开发环境中使用过SmartSVN的朋友们知道,SmartSVN是SVN的一个图形界面工具,使用起来方便快捷。同理,SmartGit是Git的图...
  • Mooner_guo
  • Mooner_guo
  • 2015-06-23 14:24
  • 10285

QNAP NAS 搭建SVN服务器笔记

最近状态都很不好,很少鼓捣这些东西了,今天难得有兴趣想折腾下搭建个自己的SVN管理下自己那些瞎写的代码,以前都是写了又丢写了又丢,最后发现好像啥都没写……其实还是觉得NAS利用率不够,所以想发挥下它的...
  • Pansing
  • Pansing
  • 2016-03-26 14:50
  • 6203

CentOS中安装subversion,并使用svn+ssh访问 ;Linux下采用RSA key的方式登录服务器

一、CentOS中安装subversion,并使用svn+ssh访问 http://blog.csdn.NET/wangjingfei/archive/2010/03/28/5424338...
  • yu704645129
  • yu704645129
  • 2016-11-15 15:13
  • 870

Linux 搭建svn服务器+ssh访问

配置svn服务器端: 开始。。。。。。 1. 下载svn源码安装包到/usr/local/svn中: cd /usr/local mkdir svn cd svn wget "http:/...
  • KK_vector
  • KK_vector
  • 2012-06-01 09:21
  • 300

Java利用ssh协议实现本地文件到远程Linux服务器的上传。

相对于文件的下载,上传就好多了,至少可以获得本地文件的绝对路径。那么就可以遍历文件目录,实现文件或者文件夹得上传。话不多说,直接代码。 一:主类 import java.util.Prop...
  • hezhihuahzh
  • hezhihuahzh
  • 4天前 14:48
  • 25

Java利用ssh协议实现从远程Linux服务器下载文件和文件夹

近来应需求需要,做了服务器之间的文件传输,利用的ssh协议。查阅各种资料博客,基本都是下载文件的方法,找不到下载文件夹得方法。思索多日写了一个下载文件夹的简单方法,可能步骤繁琐,优化不大好。由于jsc...
  • hezhihuahzh
  • hezhihuahzh
  • 4天前 14:33
  • 32

JAVA实现与Linux通信(通过SSH协议)

使用InputStream和OutputStream来获得命令行运行结果和输入内容是首先需要具备的. 然后要解决SSH连接问题. 在OpenSource项目里找到了Ganymed SSH-2 fo...
  • ning109314
  • ning109314
  • 2011-12-29 18:04
  • 5791

Eclipse(64位)安装SVN插件Subclipse实践

Eclipse(64位)安装SVN插件Subclipse实践
  • xiaoyw
  • xiaoyw
  • 2017-05-20 15:16
  • 2064

在Eclipse里使用SVN必装Subclipse插件

http://training.51cto.com/art/201005/199652_all.htm 要在Subversion(SVN)这种控制系统,要在Eclipse IDE中使用Sub...
  • forlong401
  • forlong401
  • 2013-12-16 16:34
  • 1862
    个人资料
    • 访问:4007485次
    • 积分:30762
    • 等级:
    • 排名:第186名
    • 原创:286篇
    • 转载:8篇
    • 译文:3篇
    • 评论:686条
    关于作者
    架构师,CSDN博客专家,目前正从事大数据领域的研究和开发工作,对企业级应用架构、分布式存储、SaaS和领域驱动设计有丰富的实践经验,热衷函数式编程,喜欢摄影和旅行。
    博客专栏
    最新评论