힘내 쉘이 활성화되지 않았습니까?


24

자식 서버를 설치하려고합니다. 내 자식 사용자의 기본 쉘을 / 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 검색에는이 오류와 관련된 내용이 표시되지 않습니다.

또한 지난 설치에서이 방법을 사용했으며 이러한 오류는 표시되지 않았습니다. 또한 추가 파일이나 구성이 있지만 작동하지 않는 서버가 작동하는지 살펴 보았습니다.

시스템 사양 :

  • 젠투 리눅스 (최신)
  • 힘내 1.7.5.3

/ etc / passwd 라인 :

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

git-shell푸시 / 풀 기능에만 사용되는 제한된 쉘입니다 (예 git push: git fetchgit pull). 대화식이 아니므로 대화식 쉘에 로그인하지 않아야합니다. git-shell-commands사용자의 집에 디렉토리를 추가하고 일부 바이너리를 심볼릭 링크 하여 대화식으로 만들 수 있습니다 . 그러나 매우 제한적 cd이므로 (예를 들어 바이너리가 없기 때문에) 더 나은 대안은 사용자 root또는 sudo유능한 사용자 로 로그인 하여 사용자 아래에 sudo -u git -s전체 bash셸 을 얻는 것 git입니다.
ADTC

답변:


17

나는 실행 후 이것을 발견 locate git-shell-commands

고양이 /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands/README

git-shell을 통해 호출 가능한 샘플 프로그램. 쉘이 git-shell 인 사용자의 홈 디렉토리에 'git-shell-commands'라는 디렉토리를 배치하십시오. 그런 다음 해당 사용자로 로그인하면 누구나 'git-shell-commands'디렉토리에서 실행 파일을 실행할 수 있습니다.

제공된 명령 :

help : 사용 가능한 명령의 이름을 인쇄합니다. 대화식으로 실행하면 git-shell은 시작시 자동으로 '도움말'을 실행합니다 (있는 경우).

list : 사용자의 홈 디렉토리에서 이름이 ".git"로 끝나는 기본 저장소를 표시합니다. 다른 자식 저장소는 보이지 않지만 git-shell을 통해 복제 할 수는 있습니다. 'list'는 사용 가능한 저장소를 찾는 데 필요한 git 호출 횟수를 최소화하도록 설계되었습니다. 설정에 사용자가 검색 할 수있는 추가 리포지토리가있는 경우 그에 따라 '목록'을 수정할 수 있습니다.

그래서 다음 명령을 루트로 실행했습니다.

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
"읽기"에 따라 "목록"이 무엇이든하기 위해서는 사용자의 홈 디렉토리에 베어 리포지토리가 있어야합니다.
michael

4

난 그냥 # mkdir ~git/git-shell-commands다음 su git일을했다git 1.8.1.5-r1


1
예, 잘 작동합니다. 이제 git shell에 있습니다. 그리고 뭐? git-shell-commands폴더 내부의 일부 바이너리를 symlink하지 않으면 상호 작용에 완전히 쓸모가 없습니다 . 나는 모든 것을 건너 뛰고 모든 바이너리에 액세스 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 : 죄송합니다;) @ 피터와 나는 당신이 ~/git-shell-commands올바른 권한을 가지고 있다고 생각 합니까?
VonC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.