SSH를 통해 통신할 때 Git은 어떤 명령을 사용합니까?

SSH를 통해 통신할 때 Git은 어떤 명령을 사용합니까?

command=""in 을 사용하면 authorized_keys특정 키가 실행할 수 있는 명령을 제한할 수 있습니다.

Git이 원격으로 작동하려면 어떤 명령이 필요합니까?

~에서프로 Git 책이렇게 추론할 수 git-upload-pack있고 git-receive-pack필수인데 다른 것이 있나요?

참고 저는 이 키를 사용하지 않고 사용자가 정상적으로 로그인할 수 있기를 원합니다.

답변1

힘내에는git-shellGit 전용 로그인 셸로 사용하기에 적합한 명령입니다. 다음 명령을 완전히 허용합니다.

git receive-pack
git upload-pack
git upload-archive
git-receive-pack
git-upload-pack
git-upload-archive
cvs 서버(CVS 서버를 시뮬레이션하는 데 사용되며 Git 프로토콜에는 필요하지 않음)

따라서 허용해야 하는 유일한 명령은 다음과 같습니다. 내가 액세스할 수 있는 모든 Git 버전은 하이픈이 포함된 버전만 사용합니다.

git-shell당신이 하고 싶은 일을 하는 것만으로도 충분할 수도 있습니다.


GIT_SSH매개변수를 반영하는 shim을 설정하여 특정 명령에 대해 Git이 실행 중인 내용을 확인할 수 있습니다 . 스크립트를 만드세요 ssh.sh:

#!/bin/bash
echo "$@" >&2

그런 다음 다음을 실행하십시오.

GIT_SSH="./ssh.sh" git push

실행을 시도하는 원격 명령이 표시됩니다.

답변2

해당 사용자 계정을 다른 용도로 사용하고 싶지 않은 경우 chsh해당 사용자에 대해 실행하고 /usr/bin/git-shell해당 사용자의 로그인 셸로 선택(또는 어디에 있든)하면 됩니다.

그러나 특정 키를 사용할 때만 사용자를 제한하고 싶기 때문에 동일한 작업을 수행하는 도우미 스크립트를 만들어야 합니다.

예를 들어, 다음을 포함하는 (대상 호스트의) 홈 디렉토리에 이름이 지정된 파일을 작성하십시오 git-ssh-remote-command.

#!/bin/sh
exec git-shell -c "$SSH_ORIGINAL_COMMAND"

실행 chmod a+rx /path/to/git-ssh-remote-command하여 실행 가능하게 만든 다음 .ssh/authorized_keys파일에서 git 액세스로만 제한하려는 키로 사용합니다. 예를 들면 다음과 같습니다.

restrict,command="/path/to/git-ssh-remote-command" ssh-dss 1478912c844...

스크립트의 도움으로 git-shell에서 허용하는 명령만 실행하도록 키를 제한합니다.

노트:기본적으로 git-shell은 git-lfs 및 기타 항목에 필요한 추가 명령을 허용하지 않습니다. man git-shell필요한 경우 이 작업을 수행하는 방법에 대한 지침을 참조하세요.

관련 정보