2013-01-22 29 views
5

Cách tạo lệnh tùy chỉnh cho git-shell? Theo số documentation:Lệnh tùy chỉnh với git-shell

Khi được cung cấp, chương trình sẽ thực hiện không tương tác; có thể là một trong các gói git, git upload-pack, git tải lên-lưu trữ, máy chủ cvs hoặc lệnh trong COMMAND_DIR. Vỏ là bắt đầu ở chế độ tương tác khi không có đối số nào được đưa ra; trong trường hợp này, COMMAND_DIR phải tồn tại và bất kỳ tệp thực thi nào trong đó có thể được gọi là được gọi.

Tuy nhiên, tôi không chắc mình hiểu chính xác điều này. Tôi đã tạo một người dùng tên là gituser, và đưa cho anh ta/usr/bin/git-shell làm một trình bao. Tôi đã tạo một thư mục có tên git-shell-commands và đặt một kịch bản có tên là 'testy' trong đó, nhưng tôi không thể chạy nó thông qua git-shell.

Dưới đây là những gì tôi đang cố gắng từ một máy khác:

$ ssh [email protected] testy 
fatal: unrecognized command 'testy' 

Lưu ý rằng git-shell đang làm việc, và đáp ứng, nó chỉ không thể tìm thấy lệnh tùy chỉnh của tôi.

Và đây là kịch bản:

:/home/gituser/git-shell-commands# ls -l -a 
total 12 
drwxr-xr-x 2 gituser gituser 4096 Jan 22 17:35 . 
drwxr-xr-x 4 gituser gituser 4096 Jan 22 13:57 .. 
-rwxr-xr-x 1 gituser gituser 26 Jan 22 13:58 testy 
:/home/gituser/git-shell-commands# ./testy 
hello! 
:/home/sodigit/git-shell-commands# cat testy 
echo "hello!" 

Tôi đang làm gì sai? Làm thế nào để chạy lệnh tùy chỉnh với git-shell?

+0

Bạn bắt đầu git-shell như thế nào? Bạn đã xác định 'COMMAND_DIR'? –

+0

Tôi không xác định nó. Tôi giả sử nó là $ HOME/git-shell-commands trong đó $ HOME là thư mục chính của gituser (/ home/gituser). Tôi sử dụng ssh để truy cập git-shell như trong ví dụ trên. – mimrock

+0

Tài liệu nêu rõ rằng các tập lệnh cần được đặt bên trong 'COMMAND_DIR'. Nếu bạn không biết thư mục nào trỏ đến, bạn có thể đặt các tập tin trong đó như thế nào? –

Trả lời

5

Khi nó bật ra, tính năng này đã được giới thiệu trong git 1.7.4. Tôi đang sử dụng bóp debian, có chứa một phiên bản cũ hơn của git, vì vậy đó là lý do tại sao nó không hoạt động.

Nếu bạn gặp sự cố này, hãy kiểm tra phiên bản git của bạn.

Tuy nhiên, kể từ git 1.7.10, lệnh tùy chỉnh chỉ hoạt động ở chế độ tương tác chứ không phải với -c. Tôi đã không thử git mới nhất mặc dù, do đó, có thể là vấn đề này là không liên quan đến phiên bản của phần mềm.

+0

+1 Chỉ cần có cùng một vấn đề chính xác, bạn đã lưu tôi ngày gỡ lỗi, cảm ơn bạn. – ehime

1

Để cho phép các lệnh tùy chỉnh cho pre-1.7.4 (và trong chế độ không tương tác cho 1.7.10), bạn có thể sử dụng một wrapper shell script cho git-shell:

#!/bin/bash                  

cmdline=($1) 
cmd=$(basename "${cmdline[0]}") 

if [ -z "$cmd" ] ; then 
    exec git-shell 
elif [ -n "$cmd" -a -x ~/git-shell-commands/"$cmd" ] ; then 
    ~/git-shell-commands/"$cmd" "${cmdline[@]:1}" 
else 
    exec git-shell -c "$1" 
fi 

Bất cứ nơi nào bạn bình thường sử dụng "git-shell", thay vào đó hãy tham khảo tập lệnh này, mặc dù bỏ qua bất kỳ đối số "-c" nào cho tập lệnh này.

Giống như với git-shell, tập lệnh trên yêu cầu toàn bộ dòng lệnh phải được chuyển làm đối số đầu tiên. Nếu bạn muốn vượt qua các dòng lệnh như các đối số riêng biệt:

#!/bin/bash                  

cmd=$(basename $1) 

if [ -z "$cmd" ] ; then 
    exec git-shell 
elif [ -n "$cmd" -a -x ~/git-shell-commands/"$cmd" ] ; then 
    shift 
    ~/git-shell-commands/"$cmd" "[email protected]" 
else 
    exec git-shell -c "$*" 
fi 

Ví dụ, điều này cho phép bạn gọi shell hạn chế trong authorize_keys như:

command="sshsh $SSH_ORIGINAL_COMMAND" ... 

Lưu ý rằng không phải kịch bản tạo ra một chế độ tương tác cho trước 1.7.4 (cố gắng bắt đầu một phiên tương tác sẽ dẫn đến lỗi "gây tử vong: Bạn nghĩ tôi là gì? Một trình bao?" từ git-shell), nhưng không được can thiệp vào chế độ tương tác trong 1.7.4 và mới hơn.

Tuyên bố từ chối trách nhiệm: điều này chưa được xem xét cho các lỗ hổng bảo mật. Sử dụng có nguy cơ của riêng bạn. Đặc biệt, mỗi lệnh trong lệnh ~/git-shell là một lỗ hổng bảo mật tiềm ẩn (mặc dù điều này đúng với git-shell 1.7.4 và sau đó, ngay cả khi không có bất kỳ kịch bản nào ở trên).

Các vấn đề liên quan