윈도우 subversion 사용자 비밀번호 등록 방법

이클립스 기반 툴을 사용해서 개발을 하게 되었다.
형상관리를 SVN을 사용하게 됬는데 관리 설정을 맡았다.

설치를 하려고 보니 그냥 깔려있네..(개발서버는 페도라.. 누가 yum으로 깔아놨나보다..)
전에 사용할 땐 서버를 윈도우에 VisualSVN을 썼다.
설치야 뭐 어떻게든 하면 되니까 넘어가고

SVN에 접속하는 방법은 크게 두가지인데 하나는 자체 데몬을 돌리는 방법(xinetd에 등록해도 된다.)과 apache 와 연동해서 웹으로 접근하는 방법이다.
윈도에서 VisualSVN를 쓰면 자동으로 아파치에 SVN을 연결한다. 접속도 http://~~~ 로 접속한다.
자체 데몬을 돌리면 svn://~~ 로 접속한다. 이때 쓰는 포트는 3690 이다.

설치가 되었으면 제일 먼저 할일은 Repository 생성

적당한 디렉토리를 생성하고 권한을 준다.(755)
svnadmin create --fs-type fsfs  /data/svn/data0
이러면 기본형태(없어도 기본)으로 저장소가 생긴다.
저장소는 fsfs(파일시스템)과 bsd(버클리DB)형태로 구성할 수 있다.

저장소 안에 conf디렉토리에 가면 각종 설정을 할 수 있다. 설정이래봐야 별거 없지만..
svnserve.conf 를 열어 보면 인증된 사용자에게만 허용할지 비밀번호는 어떻게 설정할지 인증방법은 어떻게 쓸지에 대한 내용이 있다. 사용자인증은 passwd파일에 등록하면 된다..

저장소를 생성했으니 다음엔 데몬을 띄워야 한다.

svnserve -d -r /data/svn

데몬을 띄웠으면 이제 외부에서 접속이 가능하다.

svn checkout svn://localhost/data0 하면
Revision 0 checkout 이라 뜬다.
정상적으로 동작하는 것이다.
이후로 이클립스에서 접속해서 commit/update하면 된다.

저건 수동으로 데몬을 띄우는 내용이고 매번 부팅할때마다 쓰거나 rc.local에 추가한다.
데몬을 자동으로 실행시키려면 이곳 에서 확인해보면 된다.

관리를 하다 보면 저장소를 다른쪽으로 이관해야하는 경우가 생긴다.
이런때는

백업
svnadmin dump repo_name > repo_name.dump

로드(저장소하나 생성하고나서)
svnadmin load repo_name < repo_name.dump

아 자꾸 까먹는다..
맨날 하는 작업도 아니고 가끔씩 하려다 보면 까먹는다.
한번 정독해야겠다.. http://wiki.kldp.org/wiki.php/Subversion-HOWTO

1. Cent OS 에 svn 설치하기

  # yum install subversion

  # mkdir /home/svn

  2. 저장소 위치 설정

# groupadd svn

/etc/group 에 svn 그룹에 포함될 사용자(svn을 사용할 사용자)를 추가한다.

  3. 저장소 추가

# cd /home/svn

# svnadmin create --fs-type fsfs sample

--> group 쓰기가 가능하도록 설정한다

# chgrp -R svn sample

# chmod -R g+w sample

  ssh 로 사용할 경우에는 패스워드 파일 생성등 별도의 작업이 필요 없다.

  4. TortoiseSVN 에서 암호 없이 접속하기

접속할 계정으로 터미널 접속

$ ssh-keygen -b 1024 -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/admin/.ssh/id_dsa.
Your public key has been saved in /home/admin/.ssh/id_dsa.pub.

$ cd .ssh

$ mv id_rsa.pub authorized_keys

$ ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 89:79:86:1b:cb:fc:a0:05:9c:65:88:b5:4c:1b:7f:c8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Last login: Sun Jan 11 00:43:26 2004 from 192.168.0.25

만약... 위의 방법으로 접속이 실패했다면...
sshd가 인증키로 인증을 허용하지 않기 때문이다.
이럴 경우.
sshd_config(보통은 /etc/ssh/sshd_config)에 다음 두줄이 포함되어 있는지 확인하자.

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

만약 개인키를 암호 없이 사용하는 것이 찝찝하다면 ssh-keygen 을 실행시 암호를 주면 된다.

  Winscp 나 psftp 를 이용해서 위에서 만든 개인키 (id_rsa) 를 가져온다.

puttygen을 실행 후 메뉴 중의 Convesions - Import Key 로 가져온 개인키를 로드

다른 건 건드리지 말고

Save private key 로 개인키를 적당한 이름의 xxx.ppk 파일로 저장한다.

-------------------------------------------------------

1. pagent.exe 를 사용하는 방법 
-------------------------------------------------------
저장 후 pageant.exe 를 실행하며 트레이 아이콘에 표시되는 데 Add Key 로

위에서 저장한 xxx.ppk 파일을 로드한다.

  이 상태에서 SVN 명령을 수행할 경우 암호 없이 사용가능하다.
-------------------------------------------------------

-------------------------------------------------------

2. TortoisePlink 를 이용하는 방법
-------------------------------------------------------

TortoiseSVN을 설치한 후 

c:\Documents and Settings\username\Application Data\Subversion\config

파일을 오픈한 후

항목에 다음과 같이 추가한다.

ssh2222 = C:/Program Files/TortoiseSVN/bin/TortoisePlink.exe -P 2222 -i "d:/keys/mykey.ppk"

2222는 ssh 포트가 다를 경우 지정하는 것이고

-i 뒤에 키파일을 지정한다.

위와 같이 한 후 

svn+ssh2222://

처럼 포트를 바꾸고 패스워드를 묻지 않도록 사용할 수 있다.

---------------------------------------------------------

저작권 안내

  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

더 자세한 내용은 윈도우 프로젝트 필수 유틸리티 Subversion, Trac, CruiseControl.NET을 참고하세요.

윈도우에서 Subversion 서버 운영하기

이재홍 http://www.pyrasis.com 2007.2.28 ~ 2014.7.10 버전 1.0

윈도우(Windows)에 Subversion, Apache, OpenSSL을 설치하여 http://, https:// 프로토콜을 사용하는 서버를 구성하는 방법을 설명하겠습니다.

목차

  1. 설치할 파일들 구하기
    1. Subversion
    2. Apache
  2. 설치 하기
    1. Apache
    2. Subversion
    3. ModSSL
  3. 인증서 만들기
    1. 개인키
    2. 공개키
  4. 저장소 만들기
  5. 설정
    1. 아파치 암호 설정
    2. 아파치 서버 설정
      1. https
      2. http
  6. 내부 도메인 설정하기
  7. 윈도우에 인증서 설치
  8. ViewVC

설치할 파일들 구하기

Subversion

http://sourceforge.net/projects/win32svn/files/에서 Windows용 최신 버전을 받습니다. 인스톨러 버전을 받아야 합니다. 받자마자 설치하지 마시고 다음에 나올 설치 순서대로 설치하시면 됩니다.

Apache

http://archive.apache.org/dist/httpd/binaries/win32/에서 httpd-2.2.25-win32-x86-openssl-0.9.8y.msi를 받습니다.

설치 하기

설치 순서는 Apache -> Subversion순입니다.

Apache

인스톨러를 실행하고 사용할 도메인을 입력합니다.

도메인이 없는 분들을 위해 내부 도메인을 설정하는 방법을 설명하겠으니 일단 사용할 도메인을 입력합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

Subversion

아파치를 먼저 설치하면 Subversion 인스톨러가 아파치를 인식해서 버전 선택 화면이 나옵니다. Modules for Apache 2.2.x를 선택합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

메모장을 관리자 권한으로 실행한 뒤 아파치 설정 파일 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf를 엽니다.

mod_dav.so 부분의 #을 삭제하여 dav_module을 활성화시킵니다. 그리고 아래 dav_svn_module 설정을 추가합니다.

LoadModule dav_svn_module "C:/Program Files (x86)/Subversion/bin/mod_dav_svn.so"

윈도우 subversion 사용자 비밀번호 등록 방법

ModSSL

https://를 사용하지 않으실 분들은 OpenSSL 모듈을 설정하지 않고 아파치 암호 설정과 http를 참고해서 설정을 하시면 됩니다.

아파치 설정 파일 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf에서 mod_ssl.so 부분의 #을 삭제하여 ssl_module을 활성화 시킵니다.

윈도우 subversion 사용자 비밀번호 등록 방법

http.conf 파일에서 다음 그림과 같이 Listen 80이라는 부분을 찾아서 그 아래에 Listen 443을 추가해줍니다. 이 포트를 열지 않으면 아무리 SSL 설정을 해줘도 https://로는 절대 접속이 안됩니다.

윈도우 subversion 사용자 비밀번호 등록 방법

인증서 만들기

https://를 사용하기 위해서는 서버 인증서가 필요합니다. Apache에 포함된 OpenSSL을 이용하여 서버 인증서를 만들어보겠습니다.

여기서 만드는 인증서는 사설 인증서입니다. 대부분 개발 서버는 개인적으로 쓰거나 내부적으로 쓰기 때문에 공인 인증서는 필요가 없습니다.

개인키

여기서는 파일명을 example로 통일하겠습니다. 이것은 자신의 상황에 맞게 바꾸어도 됩니다.

명령 프롬프트를 관리자 권한으로 실행합니다. 기본 작업 경로는 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf로 하겠습니다.

C:\Windows\system32>cd "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf"

C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf>..\bin\openssl.exe
OpenSSL>req -config openssl.cnf -new -out example.csr

  • Enter PEM pass phrase:에서는 개인키에서 사용할 암호를 입력합니다.
  • Country Name: 국가명입니다. 우리나라는 KO 입니다.
  • Locality Name: 지역명입니다.
  • Organization Name: 단체명인데 사용할 도메인을 입력합니다. (아파치 설치할때 입력했던 도메인)
  • Organizational Unit Name: 여기도 사용할 도메인을 입력합니다.
  • Email Address: 이메일 주소를 입력합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

이렇게 하면 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\confprivkey.pem, example.csr 파일이 생성되었을 것입니다.

공개키

아파치에 사용할 공개키를 만들도록 하겠습니다. 유효기간은 1년(365일)로 하였습니다.

OpenSSL> rsa -in privkey.pem -out example.key
OpenSSL> req -config openssl.cnf -new -x509 -days 365 -key example.key -out example.crt

example.key를 만들때에는 암호를 물어보는데 개인키 암호를 입력합니다.

  • Organization Name: 사용할 도메인을 입력합니다.
  • Organizational Unit Name: 여기도 사용할 도메인을 입력합니다.

https://로 접속한 서버의 도메인과 여기에 입력한 도메인이 다를 경우 접속할때마다 계속 Internet Explorer의 보안경고가 떠서 상당히 귀찮습니다. 이 도메인을 맞추어주는 것이 중요합니다(공인인증서가 아니라서 계속 경고창이 뜨긴 하지만 도메인이 일치하고 유효기간이 맞으면 인증서 설치를 통해서 보안 경고를 뜨지 않게 할 수 있습니다).

윈도우 subversion 사용자 비밀번호 등록 방법

이제 example.key, example.crt 파일이 생겼습니다.

저장소 만들기

사용할 저장소를 만듭니다. C:\repos 아래에 각 프로젝트들의 저장소를 만들도록 하겠습니다.

명령 프롬프트를 관리자 권한으로 실행합니다.

C:\Windows\system32>cd \

C:\>mkdir repos

C:\>cd repos

C:\repos>svnadmin create sample

설정

아파치 암호 설정

Subversion 저장소에 접근할 ID와 암호를 설정해야 합니다. 먼저 아파치가 설치된 디렉터리의 conf 디렉터리로 이동합니다.

명령 프롬프트를 관리자 권한으로 실행합니다.

C:\Windows\system32>cd "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf"

C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf>..\bin\htpasswd -c htpasswd sampleusr
Automatically using MD5 format.
New password: *******
Re-type new password: *******
Adding password for user sampleuser

-c 옵션은 새 파일을 만드는 옵션입니다. 이후 새로운 아이디를 추가하려면 ..\bin\htpasswd htpasswd hellouser 처럼 해주면 됩니다.

아파치 서버 설정

https

아파치 설정 파일 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\httpd.conf를 편집합니다.

전 단계에서 만들었던 인증서, htpasswd, 저장소를 사용하여 서버 설정을 하도록 하겠습니다.

아래 내용을 설정 파일 맨 아래애 추가합니다.

NameVirtualHost *:443
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\example.crt"
    SSLCertificateKeyFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\example.key"
    SSLProtocol all
    SSLCipherSuite HIGH:MEDIUM

    <Location /svn>
        DAV svn
        SVNParentPath "C:\repos"

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\htpasswd"
        Require valid-user
    </Location>
</VirtualHost>

SVNParentPath는 각 프로젝트의 저장소 디렉터리가 아닌 그 바로 위의 디렉터리를 뜻합니다. 이렇게 설정하면 https://svn.example.com/svn/sample로 접속할 수 있고 sample 대신에 각 프로젝트 저장소 디렉터리 이름으로 접근할 수 있습니다.

프로젝트의 저장소를 바로 지정하려면 SVNPath "C:\repos\sample"로 설정해야 합니다. 이렇게 설정하면 https://svn.example.com/svn/에서 그 저장소의 내용이 표시되게 됩니다.

Require valid-user로 설정했기 때문에 인증된 사용자만 볼 수 있습니다. 웹 브라우저로 저장소를 보는 것과 체크아웃은 아무에게나(Anonymous) 할 수 있게 하고 커밋은 지정된 사용자만 할 수 있도록 하려면 httpd.conf에서 설정한 부분을 아래와 같이 바꾸어 주면 됩니다.

NameVirtualHost *:443
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\example.crt"
    SSLCertificateKeyFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\example.key"
    SSLProtocol all
    SSLCipherSuite HIGH:MEDIUM

    <Location /svn>
        DAV svn
        SVNParentPath "C:\repos"

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\htpasswd"
        <LimitExcept GET PROPFIND OPTIONS REPORT>
            Require valid-user
        </LimitExcept>
    </Location>
</VirtualHost>

http

SSL을 사용하지 않는 일반적인 설정 방법입니다.

<VirtualHost *:80>
    <Location /svn>
        DAV svn
        SVNParentPath "C:\repos"

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\htpasswd"
        Require valid-user
    </Location>
</VirtualHost>

Require valid-user로 설정했기 때문에 인증된 사용자만 볼 수 있습니다. 웹 브라우저로 저장소를 보는 것과 체크아웃은 아무에게나(Anonymous) 할 수 있게 하고 커밋은 지정된 사용자만 할 수 있도록 하려면 httpd.conf에서 설정한 부분을 아래와 같이 바꾸어 주면 됩니다.

<VirtualHost *:80>
    <Location /svn>
        DAV svn
        SVNParentPath "C:\repos"

        AuthType Basic
        AuthName "example Repository"
        AuthUserFile "C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf\htpasswd"
        <LimitExcept GET PROPFIND OPTIONS REPORT>
            Require valid-user
        </LimitExcept>
    </Location>
</VirtualHost>

내부 도메인 설정하기

실제 도메인을 구입하지 않아도 내부 도메인을 설정하면 아파치에 원하는 도메인으로 접속할 수 있습니다.

메모장을 관리자 권한으로 실행한 뒤 C:\Windows\System32\Drivers\etc 아래에 hosts 파일을 편집하여 원하는 도메인으로 설정합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

여기서는 127.0.0.1(지금 설치하고 있는 컴퓨터)를 svn.example.com으로 설정했습니다. 이렇게 하면 현재 쓰고 있는 컴퓨터에서 http://svn.example.com으로 접속하면 방금 설치한 아파치로 접속하게 됩니다.

하지만 다른 컴퓨터에서는 어느 컴퓨터가 svn.example.com인지 모르기 때문에 hosts 파일을 편집하여 아파치가 설치된 컴퓨터의 IP 주소를 svn.example.com으로 설정해줘야 합니다.

윈도우에 인증서 설치

우리가 여기서 OpenSSL로 만든 인증서는 공인 인증서가 아니기 때문에 https://로 접속할 때매다 보안 경고가 뜨게 됩니다.

인증서를 만들때 Organization Name, Organizational Unit Name을 아파치로 접속할 도메인과 일치 시켰다면 인증서를 설치하는 것으로 보안 경고를 뜨지 않게 할 수 있습니다.

탐색기에서 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\conf 디렉터리로 이동한 뒤 example.crt 파일을 더블클릭합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

인증서 설치 버튼을 클릭합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

인증서 가져오기 마법사가 실행됩니다. 다음 버튼을 클릭합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

모든 인증서를 다음 저장소에 저장(P)를 선택하고 찾아보기 버튼을 클릭합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

신뢰할 수 있는 루트 인증 기관을 선택하고 확인 버튼을 클릭합니다. 그리고 다음 버튼을 클릭합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

마침 버튼을 클릭합니다.

윈도우 subversion 사용자 비밀번호 등록 방법

예(Y) 버튼을 클릭하여 인증서를 설치하고 인증서 창을 닫습니다.

윈도우 subversion 사용자 비밀번호 등록 방법

이제 웹 브라우저를 다시 시작한 뒤 https://svn.example.com/svn/sample에 접속하면 보안 경고가 뜨지 않게 됩니다.

ViewVC

Subversion에서 제공하는 기본 웹 인터페이스는 저장소의 파일과 디렉터리만 보여줄 뿐 아무것도 하지 못합니다. ViewVC를 이용해서 편리하게 저장소를 볼 수 있습니다.

설정 방법은 SubversionWithViewVCForWindows를 참고하세요.