우분투 16.04 Subversion - SVN서버, SVN+SSH 클라이언트

by DDART posted Jul 31, 2016
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

 

참고자료 : https://help.ubuntu.com/lts/serverguide/subversion.html

 

설치

 

apt install subversion apache2 libapache2-svn

 

 

저장소 만들기

 

mkdir -p /mnt/data1/svn/repos
svnadmin create /mnt/data1/svn/repos/저장소이름

 

소유권 변경

 

chown -R ddart:ddart /mnt/data1/svn/repos

 

저장소 설정

 

vi /mnt/data1/svn/repos/저장소이름/conf/svnserve.conf

 

# anon-access = read
anon-access = none
# password-db = passwd
password-db = passwd

 

vi /mnt/data1/svn/repos/저장소이름/conf/passwd

 

[users]
사용자 = 비밀번호

 

서비스에 등록

 

/etc/init.d/svnserve 새로 만들기 후 아래 내용중

DAEMON_ARGS="-d -r /mnt/data1/svn/repos"  값 자신의 값에 맞게 변경 후 붙여넣기

 

vi /etc/init.d/svnserve

 

#! /bin/sh
### BEGIN INIT INFO
# Provides:          svnserve
# Required-Start:    $local_fs $syslog $remote_fs
# Required-Stop:     $local_fs $syslog $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start svnserve
### END INIT INFO

# Author: Michal Wojciechowski <odyniec@odyniec.net>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="svnserve"
NAME=svnserve
DAEMON=/usr/bin/$NAME
DAEMON_ARGS="-d -r /mnt/data1/svn/repos"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

[ -x "$DAEMON" ] || exit 0

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /lib/init/vars.sh

. /lib/lsb/init-functions

do_start()
{
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
}

do_stop()
{
        start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?"
        [ "$RETVAL" = 2 ] && return 2
        start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
        [ "$?" = 2 ] && return 2
        rm -f $PIDFILE
        return "$RETVAL"
}

case "$1" in
  start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
        do_start
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
                0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
                2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_stop
        case "$?" in
          0|1)
                do_start
                case "$?" in
                        0) log_end_msg 0 ;;
                        1) log_end_msg 1 ;; # Old process is still running
                        *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
          *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac

exit 0

 

등록

 

chmod 755 /etc/init.d/svnserve
update-rc.d svnserve defaults

 

 

서비스 재시작

 

service svnserve restart

 

 

 

윈도우용 SVN Client

 

TortoiseSVN 설치

https://tortoisesvn.net/downloads.html

 

사용법

 

탐색기에서 저장소 디렉토리를 새로 만든 후

디렉토리를 오른쪽 클릭-> "SVN Checkout" 에서

저장소 주소를

 

svn://서버주소/저장소이름

 

하고 OK하면

username, password를 물어보는데 서버저장소 conf 디렉토리의 passwd 에서 지정한 사용자, 비번을 지정해준다.

 

 

TortoiseSVN 에서 svn+ssh 설정

 

passwd 파일에 사용자와 비번이 텍스트형태로 다 노출되어 있어 보안상 불안하면 svn+ssh 로 접속하면 해결된다.

위 저장소의 svnserve.conf 에서 passwd 를 주석처리해주고 passwd 를 삭제한다.

 

# anon-access = read
anon-access = none
# password-db = passwd

 

 

TortoiseSVN이 ssh 연결할때 내부 ssh client 기능을 구현하지 않고 특정외부 ssh 프로그램(Putty) 의 세션을 이용해 연결한다.

그러므로 TortoiseSVN으로 svn+ssh 연결하려면 사용자 PC에 Putty가 깔려있어야 하고, Putty에 서버가 ssh세션으로 등록되어 있어야 한다.

 

Putty 다운받기

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

 

putty.exe 와 puttygen.exe 2개를 다운 받는다.

 

 

1. Putty 실행후  Host Name, Port, Connection type(ssh) 지정하고

Saved Sessions 란에 세션이름 입력후 Save해서 새로운 세션을 만들고

이 세션으로 서버연결이 제대로 되는지 확인한다.

 

2. 윈도우 탐색기에서 로컬 저장소디렉토리를 만든후 Checkout 할때,

혹은 이미 Checkout되었다면 저장소오른쪽클릭->TortoiseSVN->Relocate에서

저장소 주소로

 

svn+ssh://사용자계정@Putty에서만든서버세션이름/저장소절대FullPath

 

 

로 연결한다.

 

이제 passwd 노출 없이도 svn 연결이 가능해졌는데 문제는

TortoisePlink가 뭘 할때마다 2번씩(왜 두번씩 물어보는지 모르겠지만) 계정 비밀번호 입력을 팝업창으로 요구한다.

 

TortoisePlink가 계정 비번 안묻게 하는 방법

 

ssh 로그인할때 보안키(public, private key 쌍)를 이용하면 보안키만으로 비번없이 접속할수 있다.

putty 세션에 이 키를 설정해서 로그인때 더이상 비번입력이 필요없게 하면  위 문제를 해결할수 있다.

 

보안키 생성하는 방법은

우분투내의 openssh keygen으로 해도되고 위 putty 사이트에서 받은 puttygen 으로 해도 된다.

 

무엇으로 하든 public키랑 private 키를 생성한후

public key는 서버사용자 홈디렉토리내 .ssh 디렉토리에 authorized_keys 에 추가해 주고

 

/home/사용자/.ssh/authorized_keys

 

private key는 클라이언트 사용자PC에서

putty의  서버세션을 재로드후  connection->ssh->auth 에서 private key의 위치를 지정하고 session을 저장한 후 연결하면 

서버-클라이언트 SSH연결시 비번없이 접속가능하다.

 

주의할점은 key 생성할때 키교환을 위한 비번 passphrase가 지정된걸 쓰면 로그인시 passphrase를 묻게되어

ToroisePlink가 나중에 또 묻게 되므로 passphrase는 key를 교환, 이동시킬때 보안상 적용하고

실제 putty 설정에 사용할때는 puttygen같은 key툴로 passphrase를 없앤 ppk파일을 지정해야한다.

 

 

 

1. 우분투에서 openssh 키젠으로 생성하기

 

 사용자계정홈에서

 

cd ~
ssh-keygen -t rsa

 

~/.ssh/ 에 id_rsa 와 id_rsa.pub 가 새로 생성되는데

id_rsa.pub는 authorized_keys에 추가해주거나 없으면 authorized_keys로 이름을 바꾸고

id_rsa 교환키는 PC로 가져와서 puttygen프로그램으로 import한 후 passphrase를 지우고

'Save private key' 버튼을 눌러 putty키포맷으로 바꿔 ppk확장자로 생성해준 후

이 ppk파일을 putty session 설정에서 지정해준다.

 

2. puttygen으로 생성하기

 

Key->Generate key pair 후 마우스를 움직여주면 생성된다

Key 상단

Public key for pasting into OpenSSH authorized_keys file:

문구 아래 내용을 복사해서

~/.ssh/authorized_keys 에 라인단위로 추가해주고

'Save private key' 버튼으로 ppk파일을 생성후 putty session 설정에 적용해주면 된다.

 

 

 

※ Putty 세션설정에서

Connection -> Data -> Auto-login username에 사용자계정이름을 지정해주면

Putty 자동로그인이 완성된다.

또한

svn+ssh://사용자계정@Putty에서만든서버세션이름/저장소절대FullPath

에서 사용자계정은 빼고

svn+ssh://Putty에서만든서버세션이름/저장소절대FullPath

로 간단히 할수 있다.

 

 

 

commnad line 에서 svn+ssh 설정

 

tortoise 의 command line svn명령어에서 svn+ssh 를 연결할때 SVN_SSH 환경변수에 TortoisePLink.exe 가 설정되어 있어야 한다.

환경변수에 SVN_SSH값으로

C:\\Program Files\\TortoiseSVN\\bin\\TortoisePlink.exe

와 같은 경로를 지정해주는데 이중 '\\' 처럼 \문자를 이스케이프시켜줘야 제대로 동작한다.

 

svn commit -m "메세지" 체크아웃설정된로컬저장소경로(예: C://myrepos)

svn update 로컬저장소경로