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


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

ウォンブルが言ったように、確かにこれは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だけでした。
ボット

rootを変数として設定し、誤って指定された場合に$ @からrootを削除するいくつかのロジックを持つことができますか?@Botのような問題を防ぎます。
MattPark 2013年

5

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


ご意見ありがとうございますが、違います。いつものように、すべてが台無しになるまで、すべてがうまく機能していました。
Andrejs Cainikovs 2009

まあ、それから、あなたが台無しにしたものは何でも直してください。
ウォンブル

あなたは正しい、ウォンブル。問題のある場所を見つけたようです。
Andrejs Cainikovs 2009

3

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

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

svn bookにはもっと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 2010

authorized_keys2からsvnserve.binを呼び出すことと、そのファイルでsvnserveを実行することはまったく同じであると思いますよね?私はsvnserveバイナリの名前を変更するのを防ぐためにそうしましたが、それは間違っていると思いますか?
mox601 2010
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.