web-dev-qa-db-ja.com

svnとsvn + sshのSubversionパスの違い

[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://[email protected]/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トンネルを使用すると、次のようにしてリポジトリを取得できます。

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

...つまり、リポジトリへの完全な物理パスを指定する必要があります。えっ?

10

ウォンブルが言ったように、確かにこれは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
    
13

SSH経由のsvn(svn+ssh://)は、SSHをトランスポートとして使用して「ローカル」にSubversionリポジトリにアクセスしているだけなので、ファイルシステム全体にアクセスできます。対照的に、Svnserveは、「パスを/srv/svnなので、手動で指定する必要はありません。

5
womble

Subversionユーザーの〜/ .ssh/authorized_keysを編集することにより、svn + sshを使用するユーザーのsshログインコマンドを編集できます。ユーザーの行は次のようになります。

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

svn book にはもっとsvn + sshのトリックがあります

3
slubman

これはそれ自体が質問のようですが、これは本当にこれに関連しています。

秘密/公開鍵で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

私は本当に解決策を思い付くことはできません...

0
mox601