Vỏ Git không được kích hoạt?


24

Tôi đang cố gắng cài đặt máy chủ git. Khi tôi đặt shell mặc định cho người dùng git của mình thành / usr / bin / git-shell, tôi gặp lỗi khi đăng nhập là git.

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

Khóa Ssh dựa trên công việc truy cập, quyền được đặt chính xác.

Tìm kiếm của Google không hiển thị bất cứ điều gì liên quan đến lỗi này.

Tôi cũng đã sử dụng phương pháp này trong các cài đặt trước đây và không có lỗi nào như vậy được hiển thị. Ngoài ra tôi đã xem máy chủ làm việc nếu nó có thêm một số tập tin hoặc cấu hình nhưng không có điều đó.

Thông số hệ thống:

  • Gentoo linux (mới nhất)
  • Git 1.7.5.3

/ etc / passwd dòng:

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

git-shelllà một vỏ HẠN CHẾ SỬ DỤNG cho các chức năng push / pull chỉ (ví dụ git push, git fetchgit pull). Nó không có nghĩa là tương tác, vì vậy bạn không nên đăng nhập vào một vỏ tương tác. Bạn có thể làm cho nó tương tác một chút bằng cách thêm một git-shell-commandsthư mục trong nhà của người dùng và liên kết một số nhị phân bên trong. Nhưng nó rất hạn chế (chẳng hạn như không có nhị phân cd), vì vậy, một cách khác tốt hơn là đăng nhập với tư cách là rootmột sudongười dùng có thể và làm gì sudo -u git -sđể có được một bashvỏ đầy đủ theo gitngười dùng.
ADTC

Câu trả lời:


17

Tôi tìm thấy cái này sau khi chạy locate git-shell-commands

mèo /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands/README

Các chương trình mẫu có thể gọi thông qua git-shell. Đặt một thư mục có tên 'git-shell-Command' trong thư mục chính của người dùng có shell là git-shell. Sau đó, bất cứ ai đăng nhập như người dùng đó sẽ có thể chạy các tệp thực thi trong thư mục 'git-shell-Command'.

Các lệnh được cung cấp:

help: In ra tên của các lệnh có sẵn. Khi chạy tương tác, git-shell sẽ tự động chạy 'trợ giúp' khi khởi động, miễn là nó tồn tại.

list: Hiển thị bất kỳ kho lưu trữ trần nào có tên kết thúc bằng ".git" trong thư mục chính của người dùng. Không có kho git nào khác có thể nhìn thấy, mặc dù chúng có thể được sao chép thông qua git-shell. 'list' được thiết kế để giảm thiểu số lượng cuộc gọi đến git phải được thực hiện trong việc tìm các kho lưu trữ có sẵn; nếu thiết lập của bạn có kho lưu trữ bổ sung mà người dùng có thể khám phá được, bạn có thể muốn sửa đổi 'danh sách' cho phù hợp.

Vì vậy, tôi đã chạy các lệnh sau với quyền 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

Sau đó tôi đã có thể chạy như sau với tư cách là gitngười dùng:

[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

Bây giờ tôi không thấy danh sách và trợ giúp tốt là gì, nhưng đăng nhập đã hoạt động. :)


1
sẽ phải có các kho lưu trữ trần trong các thư mục nhà của người dùng để "liệt kê" để làm bất cứ điều gì (theo readme)
michael

4

tôi chỉ phải làm # mkdir ~git/git-shell-commandssau đó su gitlàm việc chogit 1.8.1.5-r1


1
Vâng, nó hoạt động. Bây giờ bạn đang ở trong vỏ git. Rồi sao? Nó hoàn toàn vô dụng đối với sự tương tác trừ khi bạn liên kết một số nhị phân trong git-shell-commandsthư mục. Tôi nghĩ sẽ hữu ích hơn khi bỏ qua tất cả những điều đó và làm sudo -u git -snhư vậy để bạn có được một bashvỏ đầy đủ với quyền truy cập vào tất cả các nhị phân. Bạn cũng ở trong thư mục hiện tại.
ADTC

3

Nếu bạn xem mã kích hoạt thông báo lỗi đó ( dường như đã khác trong các phiên bản Git cũ hơn):

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."); 

đây phải là một vấn đề đúng trong thư mục git-shell.

Người dùng phải có quyền đọc và thực thi quyền đối với thư mục để thực thi các chương trình trong đó.


... đúng như nó nói trong thông báo lỗi, trên thực tế. (-:
JdeBP

@JdeBP: xin lỗi;) @Peter và tôi cho rằng bạn có ~/git-shell-commandsquyền với quyền?
VonC
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.