Различия в путях Subversion для SVN и SVN + SSH

10

[02:48] [root @ server: ~] 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'

Игра вокруг за пару часов я обнаружил , что appearantly если я использую SSH туннель, я смог получить свой репозиторий с помощью следующих действий :

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

... что означает, что я должен указать полный физический путь к репо. А?

Андрейс Кайников
источник

Ответы:

13

Как сказал womble, это действительно «svn over ssh».

У меня был svn + ssh, работающий без указания полного пути к репозиториям, потому что на сервере svn вместо оригинального двоичного файла svnserve был скрипт-обертка svnserve. Позже, во время обновления 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.
Бот
Может ли root быть установлен как переменная, а затем иметь некоторую логику, которая удаляет корень из $ @, если он предоставлен по ошибке? Это предотвратит проблему как @Bot.
MattPark
5

Это потому, что svn over SSH ( svn+ssh://) просто обращается к хранилищу subversion «локально», используя SSH в качестве транспорта, и, следовательно, у вас есть доступ ко всей файловой системе. В отличие от этого, в Svnserve сказано: «начинайте свой путь /srv/svn, и вам не нужно указывать его вручную».

ombble
источник
Спасибо за ваше мнение, но нет, это не так. Все работало прекрасно, пока я все не облажался, как обычно.
Андрейс Кайников
Ну, тогда исправь все, что ты облажался.
womble
Ты прав, блудница. Кажется, я нашел, где была проблема.
Андрейс Кайников
3

Вы можете редактировать команду входа в систему ssh для пользователей, используя svn + ssh, отредактировав ~ / .ssh / authorized_keys пользователя subversion. Строка для пользователя будет выглядеть так:

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

В книге svn больше трюков svn + ssh

slubman
источник
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

Это файл author_keys2, который у меня есть в каталоге /home/svn/.ssh

$ 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]

и файл 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

Я действительно не могу придумать решение ...

mox601
источник
Вы не правильно прочитали мой ответ. Вам следует переименовать двоичный файл svnserve в svnserve.bin и сохранить имеющийся там скрипт-обертку как svnserve. Или просто, содержимое обоих ваших файлов должно быть заменено.
Андрейс Кайников
Я думаю, что вызов svnserve.bin из авторизованного_кей2 и в этом файле выполнение svnserve должно быть точно таким же, не так ли? Я сделал так, чтобы предотвратить переименование бинарного svnserve, вы думаете, что это неправильно?
mox601