svn 및 svn + ssh의 Subversion 경로 차이


10

[02:48] [root @ 서버 : ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn 인수에서 볼 수 있듯이 내 svn 루트 디렉토리는 / srv / svn입니다.

이제 원격 컴퓨터의 마법이 ...

이것은 작동합니다 :

> svn co svn://svn-user@domain.com/test-repo

그러나 이것은 아닙니다 :

> svn co svn+ssh://svn-user@<putty-session-name>/test-repo
'No repository found in 'svn+ssh://svn-user@<putty-session-name>/test-repo'

ssh tunnel을 사용하면 겉보기 에 두 시간 동안 놀았는데 다음을 사용하여 내 repo를 얻을 수 있습니다.

> svn co svn+ssh://svn-user@<putty-session-name>/srv/svn/test-repo

... 이것은 repo에 대한 실제 경로를 지정해야 함을 의미합니다. 응?

답변:


13

womble이 말했듯이, 실제로 이것은 ssh에 대한 svn의 '기능'입니다.

svn 서버가 원래 svnserve 바이너리 대신 svnserve 래퍼 스크립트를 가지고 있기 때문에 저장소에 대한 전체 경로를 지정하지 않고 svn + ssh가 작동했습니다. 나중에 Subversion 업데이트 중에이 스크립트는 원래 바이너리로 덮어 쓰기되었습니다.

해결책:

  1. svnserve를 bin으로 이름 바꾸기

    mv /usr/bin/svnserve /usr/bin/svnserve.bin
    
  2. 이 스크립트를 / usr / bin / svnserve로 저장하십시오.

    #!/bin/sh
    exec /usr/bin/svnserve.bin -r /srv/svn "$@"
    
  3. 권한 업데이트

    chmod 755 /usr/bin/svnserve
    

1
역전을 제외하고는 같은 문제가있었습니다. svn + ssh : // host / path / to / repo를 수행 할 수없는 이유를 알아 내려고 몇 시간을 보냈습니다. 왜냐하면 자동으로 svn 루트로 안내하는 스크립트가 실행 되었기 때문입니다. 내가해야 할 일은 svn + ssh : // host / repo뿐이었습니다.
— Bot

루트를 변수로 설정 한 다음 실수로 제공된 경우 $ @에서 루트를 제거하는 논리가 있습니까? @Bot과 같은 문제를 방지합니다.
— MattPark

5

SSH ( svn+ssh://)를 통한 svn은 SSH를 전송으로 사용하여 "로컬로"하위 버전 저장소에 액세스하기 때문에 전체 파일 시스템에 액세스 할 수 있기 때문입니다. 반대로 Svnserve는 "로 경로를 시작 /srv/svn하므로 수동으로 지정할 필요가 없습니다.


귀하의 의견에 감사드립니다 만, 아닙니다. 평소처럼 모든 것이 망칠 때까지 모든 것이 아름답게 작동했습니다.
— Andrejs Cainikovs

그럼, 당신이 망친 것을 고치세요.
— womble

당신 말이 맞아요 문제가있는 곳을 찾은 것 같습니다.
— Andrejs Cainikovs

3

서브 버전 사용자의 ~ / .ssh / authorized_keys를 편집하여 svn + ssh를 사용하는 사용자의 ssh login 명령을 편집 할 수 있습니다. 사용자 라인은 다음과 같습니다.

command="/usr/bin/svnserve -r /srv/svn [other svnserve options]" <key type> <user key> <key comment>

svn 책 에는 더 많은 svn + ssh 트릭이 있습니다


0

이것은 그 자체로 질문과 비슷하지만 실제로 이것과 관련이 있습니다.

개인 / 공개 키를 사용하여 svn + ssh를 설정하면이 방법으로 상대 경로를 사용하여 내 저장소에 액세스 할 수 없습니다.

svn co svn+ssh://svn@SERVERIP/simple-webapp-svn simple-webapp-svn

이 오류가 발생하기 때문에 :

svn: URL 'svn+ssh://svn@SERVERIP/simple-webapp-svn' doesn't exist

그러나 오직 그렇게 :

svn co svn+ssh://svn@SERVERIP/home/svn/projects/simple-webapp-svn simple-webapp-svn

이것은 내가 /home/svn/.ssh 디렉토리에있는 authorized_keys2 파일입니다.

$ sudo cat /home/svn/.ssh/authorized_keys2
command="/usr/bin/svnserve.bin -t --tunnel-user=USERNAME",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa [rsa-key] [user-note]

이전 답변 에서 Andrejs가 제안한 svnserve.bin 파일

$ cat  /usr/bin/svnserve.bin 
#!/bin/sh
exec /usr/bin/svnserve -r /home/svn/projects "$@"

여기에 나열된 권한 문제에 대해서도 생각했습니다.

-rwxr-xr-x 1 root root 63684 2009-12-12 06:45 /usr/bin/svnserve
-rwxr-xr-x 1 root root    61 2010-08-25 17:19 /usr/bin/svnserve.bin

나는 정말로 해결책을 제시 할 수 없다 ...


내 대답을 제대로 읽지 못했습니다. svnserve 바이너리의 이름을 svnserve.bin으로 바꾸고 거기에있는 래퍼 스크립트를 svnserve로 저장해야합니다. 또는 간단히 두 파일의 내용을 서로 바꿔야합니다.
— Andrejs Cainikovs

Authorized_keys2에서 svnserve.bin을 호출하는 것과 svnserve를 실행하는 파일에서 정확히 동일해야한다고 생각합니까? svnserve 바이너리의 이름을 바꾸는 것을 막기 위해 그렇게 좋아했습니다. 잘못 생각하십니까?
— mox601
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.