sudo -u git 클론

sudo -u git 클론

우분투 서버 14.04를 사용하고 있습니다.

나는 다음과 같이 작동하는 Apache 웹 서버를 사용하고 있습니다.www-데이터. 난 그것을 해야 해git clone 스크립트에서(웹훅). 스크립트가 실행됩니다www-데이터사용자 권리.

git clone권한 문제가 있는 디렉토리에서 일반 사용자로 실행하면 /var/www/html괜찮습니다. 왜냐하면 제가 원하기 때문입니다.www-데이터사용자는 거기에 쓸 수 있습니다.

이것www-데이터사용자의 집은 으로 설정되어 /var/www있고 SSH 키는 에 있습니다 /var/www/.ssh.

내가 실행하면 :

sudo git clone [email protected]:user/repo.git

예상대로 작동합니다. 내 사용자의 SSH 공개 키는authorized_keys@my.git.server에 나열되어 있습니다.

하지만 bash 스크립트에서 실행해야 하며 일반 권한이 있어야 합니다.

그래서 공개 SSH 키를 복사했습니다.www-데이터사용자는 my.git.server의authorized_keys 파일에 액세스합니다. 이론적으로 이는 다음을 의미해야 합니다.www-데이터사용자는 SSH를 통해 git clone을 시작할 수 있으며 이는 비밀번호가 필요하지 않으며 매우 안전합니다.

그래서 그것을 테스트하려면 다음과 같은 것을 실행해야 할 것 같습니다.

sudo -u www-data -H git clone [email protected]:user/repo.git

내 이해는 이것이 내가 가정하게 만들 것이라는 것입니다www-데이터~/.ssh사용자님, SSH를 통해 실행할 때 작업 디렉터리에 있도록 내 홈 디렉터리를 설정하세요 .git clone

명령을 실행하려고 할 때 발생하는 문제는 다음과 같은 오류 출력입니다.

Cloning into 'repo'...
fatal: 'user/repo.git' does not appear to be a git repository
fatal: Could not read from remote repository.

내가 말했듯이, sudo로 실행하면 문제 없습니다. www-data로 실행하려고 할 때만. 명령이 해석되는 방식에 문제가 있어 경로/저장소 이름을 잘못 읽게 되는 것 같나요?


l0b0의 응답에 따르면 출력은 다음과 같습니다.

james-c@WebHost-1:~$ sudo ssh -v [email protected] 2>&1 | grep 'identity file'
debug1: identity file /root/.ssh/id_rsa type -1
debug1: identity file /root/.ssh/id_rsa-cert type -1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: identity file /root/.ssh/id_dsa-cert type -1
debug1: identity file /root/.ssh/id_ecdsa type -1
debug1: identity file /root/.ssh/id_ecdsa-cert type -1
debug1: identity file /root/.ssh/id_ed25519 type -1
debug1: identity file /root/.ssh/id_ed25519-cert type -1
james-c@WebHost-1:~$ sudo -u www-data ssh -v [email protected] 2>&1 | grep 'identity file'
debug1: identity file /var/www/.ssh/id_rsa type 1
debug1: identity file /var/www/.ssh/id_rsa-cert type -1
debug1: identity file /var/www/.ssh/id_dsa type -1
debug1: identity file /var/www/.ssh/id_dsa-cert type -1
debug1: identity file /var/www/.ssh/id_ecdsa type -1
debug1: identity file /var/www/.ssh/id_ecdsa-cert type -1
debug1: identity file /var/www/.ssh/id_ed25519 type -1
debug1: identity file /var/www/.ssh/id_ed25519-cert type -1

내가 여기서 무엇을 찾고 있는지 잘 모르겠나요?

답변1

저도 같은 문제가 있었는데 이렇게 사용자를 전환하면 환경이 보존되는 것 같았습니다. 이로 인해 잘못된 Git 구성이 로드되고 권한 문제로 인해 실패합니다.

제 경우에는 다음 명령을 사용하여 문제를 우회했습니다.

sudo -u deploydeputy /bin/bash -c "export HOME=/home/deploydeputy && git clone [email protected]:inventid/cdn.git /tmp/cdn"

관련 정보