ไม่ได้เปิดใช้งาน Git shell?


24

ฉันพยายามติดตั้งเซิร์ฟเวอร์ git เมื่อฉันตั้งค่าเปลือกเริ่มต้นสำหรับผู้ใช้ git ของฉันเป็น / usr / bin / git-shell ฉันได้รับข้อผิดพลาดเมื่อเข้าสู่ระบบเป็น git

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

การเข้าถึงที่ใช้คีย์ Ssh การตั้งค่าการอนุญาตถูกต้อง

การค้นหาโดย Google จะไม่แสดงสิ่งใดเกี่ยวกับข้อผิดพลาดนี้

ฉันยังใช้วิธีนี้ในการติดตั้งในอดีตและไม่มีข้อผิดพลาดดังกล่าวปรากฏขึ้น นอกจากนี้ฉันดูที่เซิร์ฟเวอร์การทำงานหากมีไฟล์เพิ่มเติมหรือกำหนดค่าบางอย่าง แต่ไม่มีสิ่งนั้น

ข้อมูลจำเพาะระบบ:

  • Gentoo linux (ล่าสุด)
  • Git 1.7.5.3

/ etc / passwd line:

git:x:1002:1004::/home/git:/usr/bin/git-shell

git-shellเป็นเปลือก จำกัด เพื่อนำไปใช้สำหรับการทำงานผลัก / ดึงเท่านั้น (เช่นgit push, git fetchและgit pull) มันไม่ได้เป็นแบบอินเทอร์แอคทีฟดังนั้นคุณไม่ควรลงชื่อเข้าใช้ในเชลล์แบบโต้ตอบ คุณสามารถทำให้มันค่อนข้างโต้ตอบโดยการเพิ่มgit-shell-commandsไดเรกทอรีในบ้านของผู้ใช้และเชื่อมโยงไบนารีบางอย่างภายใน แต่มันมีข้อ จำกัด มาก ( cdยกตัวอย่างเช่นไม่มีไบนารี) ดังนั้นทางเลือกที่ดีกว่าคือการเข้าสู่ระบบในฐานะผู้ใช้ที่rootมีความsudoสามารถและทำได้sudo -u git -sเพื่อรับbashเชลล์เต็มใต้gitผู้ใช้
ADTC

คำตอบ:


17

ฉันพบสิ่งนี้หลังจากทำงาน locate git-shell-commands

cat /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands/README

โปรแกรมตัวอย่างสามารถเรียกใช้ได้ผ่าน git-shell วางไดเร็กทอรีชื่อ 'git-shell-command' ในโฮมไดเร็กทอรีของผู้ใช้ที่เชลล์คือ git-shell จากนั้นทุกคนที่เข้าสู่ระบบในฐานะผู้ใช้นั้นจะสามารถเรียกใช้ไฟล์ปฏิบัติการได้ในไดเรกทอรี 'git-shell-command'

คำสั่งที่ให้ไว้:

ช่วย: พิมพ์ชื่อของคำสั่งที่มีอยู่ เมื่อทำงานแบบโต้ตอบ git-shell จะเรียกใช้ 'ความช่วยเหลือ' โดยอัตโนมัติเมื่อเริ่มต้นหากมีอยู่

รายการ: แสดงที่เก็บเปลือยใด ๆ ที่มีชื่อลงท้ายด้วย ".git" ภายใต้ไดเรกทอรีบ้านของผู้ใช้ ไม่มีที่เก็บ git อื่นที่มองเห็นได้แม้ว่าจะสามารถทำการโคลนผ่าน git-shell ได้ 'รายการ' ถูกออกแบบมาเพื่อลดจำนวนการเรียกไปยังคอมไพล์ที่ต้องทำในการค้นหาที่เก็บข้อมูลที่มีอยู่ หากการตั้งค่าของคุณมีที่เก็บข้อมูลเพิ่มเติมที่ผู้ใช้สามารถค้นพบได้คุณอาจต้องการแก้ไข 'รายการ' ตามนั้น

ดังนั้นฉันจึงรันคำสั่งต่อไปนี้เป็น root:

cp /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands /home/git -R
chown git:developers /home/git/git-shell-commands/ -R
chmod +x /home/git/git-shell-commands/help
chmod +x /home/git/git-shell-commands/list
exit

ฉันสามารถเรียกใช้สิ่งต่อไปนี้ในฐานะgitผู้ใช้:

[me@svn ~]$ su git
Password:
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> help
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> list
git> exit

ตอนนี้ฉันไม่เห็นความช่วยเหลือและรายการที่ดี แต่การเข้าสู่ระบบใช้งานได้ :)


1
ก็จะต้องมีการเก็บเปลือยในผู้ใช้ไดเรกทอรีบ้าน 'รายการ' ที่จะทำอะไร (ตามไฟล์ README)
ไมเคิล

4

ฉันแค่ต้องทำงานให้# mkdir ~git/git-shell-commandsแล้วsu gitgit 1.8.1.5-r1


1
ใช่มันใช้งานได้ ตอนนี้คุณอยู่ในเปลือก git แล้วไง? มันไม่มีประโยชน์อย่างสมบูรณ์สำหรับการมีปฏิสัมพันธ์เว้นแต่คุณจะเชื่อมโยงไบนารีบางอย่างในgit-shell-commandsโฟลเดอร์ ฉันคิดว่ามันมีประโยชน์มากกว่าที่จะข้ามทุกสิ่งและทำsudo -u git -sเพื่อให้คุณได้bashเปลือกเต็มรูปแบบที่มีการเข้าถึงไบนารีทั้งหมด คุณยังอยู่ในไดเรกทอรีปัจจุบัน
ADTC

3

หากคุณดูรหัสที่ก่อให้เกิดข้อความแสดงข้อผิดพลาดนั้น (ซึ่งดูเหมือนจะแตกต่างจาก Git รุ่นเก่ากว่า):

if (access(COMMAND_DIR, R_OK | X_OK) == -1) {
  die("Interactive git shell is not enabled.\n"
     "hint: ~/" COMMAND_DIR " should exist "
     "and have read and execute access."); 

นี่ควรเป็นปัญหาที่ถูกต้องในไดเรกทอรี git-shell

ผู้ใช้จะต้องอ่านและดำเนินการอนุญาตไปยังไดเรกทอรีเพื่อดำเนินการโปรแกรมในนั้น


... ตามที่ระบุไว้ในข้อความแสดงข้อผิดพลาดตามความเป็นจริง (-:
JdeBP

@JdeBP: ขออภัย;) @Peter และฉันคิดว่าคุณมี~/git-shell-commandsสิทธิ์ที่เหมาะสมใช่ไหม
VonC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.