ความแตกต่างพา ธ การโค่นล้มสำหรับ svn และ svn + ssh


10

[02:48] [root @ เซิร์ฟเวอร์: ~] ps ax | grep svn 23986? Ss 0:00 / usr / bin / svnserve -d -r / srv / svn ดังที่คุณเห็นจากการโต้แย้งอาร์กิวเมนต์ svn root dir ของฉันคือ / 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 ฉันสามารถ repo ของฉันโดยใช้ต่อไปนี้:

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

... ซึ่งหมายความว่าฉันควรระบุพา ธ แบบเต็มไปยัง repo ฮะ?

คำตอบ:


13

ตามที่ womble ได้กล่าวไว้แน่นอนนี่คือ 'คุณสมบัติ' ของ svn มากกว่า ssh

ฉันใช้ svn + ssh โดยไม่ต้องระบุพา ธ เต็มไปยังที่เก็บเพราะเซิร์ฟเวอร์ svn มีสคริปต์ svnserve wrapper แทนที่ svnserve binary ดั้งเดิม ต่อมาในระหว่างการอัปเดตการโค่นล้มสคริปต์นี้ถูกเขียนทับโดยไบนารีดั้งเดิม

สารละลาย:

  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
MattPark

5

นั่นเป็นเพราะ svn ผ่าน SSH ( svn+ssh://) เป็นเพียงการเข้าถึงพื้นที่เก็บข้อมูลการโค่นล้ม "ภายในเครื่อง" โดยใช้ SSH เป็นการขนส่งและด้วยเหตุนี้คุณจึงสามารถเข้าถึงระบบไฟล์ทั้งหมดได้ ในทางตรงกันข้าม Svnserve ได้รับการบอกว่า "เริ่มเส้นทางของคุณด้วย/srv/svnดังนั้นคุณจึงไม่ต้องระบุด้วยตนเอง


ขอบคุณสำหรับความคิดเห็นของคุณ แต่ไม่ใช่มันไม่ใช่ ทุกอย่างทำงานได้ดีจนกระทั่งฉันทำทุกสิ่งจนเมาเหมือนปกติ
Andrejs Cainikovs

ถ้างั้นจงแก้ไขสิ่งที่คุณทำไป
womble

คุณพูดถูก ดูเหมือนว่าฉันพบปัญหาแล้ว
Andrejs Cainikovs

3

คุณสามารถแก้ไขคำสั่งล็อกอิน ssh สำหรับผู้ใช้ที่ใช้ svn + ssh โดยแก้ไข ~ / .ssh / authorized_keys ของผู้ใช้การโค่นล้ม บรรทัดสำหรับผู้ใช้จะมีลักษณะดังนี้:

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

มีเทคนิค svn + ssh เพิ่มเติมในหนังสือ svn


0

นี่เป็นคำถามที่ถามตัวเองมากกว่า แต่มันเกี่ยวข้องกับคำถามนี้จริงๆ

เมื่อตั้งค่า svn + ssh ด้วยคีย์ส่วนตัว / สาธารณะฉันไม่สามารถเข้าถึง repo ของฉันได้โดยใช้เส้นทางสัมพัทธ์:

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

นี่คือไฟล์ authorized_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 ที่ Andrejs แนะนำไว้ในคำตอบก่อนหน้า

$ 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 binary เป็น svnserve.bin และบันทึกสคริปต์ wrapper ที่คุณมีไว้ที่ svnserve หรืออย่างง่ายเนื้อหาของไฟล์ทั้งสองควรถูกสลับ
Andrejs Cainikovs

ฉันคิดว่าการเรียก svnserve.bin จาก authorized_keys2 และในไฟล์ที่เรียกใช้ svnserve นั้นควรจะเหมือนกันทุกประการใช่ไหม ฉันชอบที่จะป้องกันการเปลี่ยนชื่อ svnserve ไบนารีคุณคิดว่ามันผิดหรือเปล่า?
mox601
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.