sudo를 사용하여 명령을 실행할 때 SSH 인증 에이전트에 연결

sudo를 사용하여 명령을 실행할 때 SSH 인증 에이전트에 연결

나는 사용한다관리자를 기다려주세요다양한 운영 체제 구성을 버전 제어에 적용합니다. 지금까지는 로컬 Git 저장소를 사용하여 변경 사항을 추적하는 것만으로도 만족했지만 갑자기 이 기능을 최대한 활용하지 못하고 있다는 사실을 깨달았기 때문에 복사본을 보관하도록 원격 저장소를 구성하는 것이 유용할 것이라고 생각했습니다. 다른 저장소에서 데이터를 검색할 수 있도록 /etc컴퓨터가 구성을 가져옵니다.

원격 서버에서 베어 저장소를 만들었습니다(사용자만 git해당 내용에 액세스할 수 있도록 함).

sudo -u git -H git init --bare ~git/repos/anthony-etc.git
chmod -R 700 ~git/repos/anthony-etc.git/

원격 서버의 SSH 데몬은 사용자(사용자 포함 git)가 키만 사용하여 인증할 수 있도록 구성되었으며 내 개인 공개 키를 서버의 사용자에게 업로드했습니다 .authorized_keys.git

내 로컬 컴퓨터에서 원격 저장소로 추가했습니다.

sudo git remote add origin [email protected]:/home/git/repos/anthony-etc.git/

슈퍼유저만 디렉터리 /etc(하위 디렉터리 포함 ) .git의 파일을 수정할 수 있으므로 모든 Git 명령은 sudo.

SSH를 사용하여 푸시를 시도하기 전에 현재 SSH 인증 에이전트를 사용할 수 있는지 확인했습니다.

$ sudo ssh-add -l
Could not open a connection to your authentication agent.

실행하면 실패 하고 루트가 아닌 사용자로 이미 사용하고 있는 SSH 인증 에이전트와 작동하도록 sudo구성할 수 있는 방법이 궁금합니다 .sudo

답변1

작동하지 않는 이유는 SSH_AUTH_SOCK명령을 실행할 때 SSH 에이전트의 Unix 도메인 소켓 파일 이름을 저장하는 데 사용되는 변수가 환경에 없기 때문입니다 sudo.

이 옵션은 기본적으로 env_reset보안 정책에서 활성화되어 있으며 많은 GNU/Linux 배포판에서는 sudo구성 파일에 다음 줄을 추가하여 이를 명시적으로 만듭니다./etc/sudoers

Defaults    env_reset

이렇게 하면 명령이 최소 환경에서 실행되고 호출 사용자의 환경 변수 대부분이 제한된 환경에서 제거됩니다.

특정 변수를 화이트리스트에 등록하여 환경에 유지할 수 있습니다. 안전을 위해 visudo명령을 사용하여 sudoers구성 파일을 편집합니다. 또한 /etc/sudoers직접 수정하는 대신 디렉토리에 있는 별도의 파일에 사용자 정의 수정 사항을 추가하고 있습니다 /etc/sudoers.d/. 이를 위해 sudo visudo -f /etc/sudoers.d/custom구성에 다음 줄이 포함되도록 실행합니다.

Defaults    env_keep += "SSH_AUTH_SOCK"

이제 실행하면 sudo ssh-add -l인증 브로커에 연결할 수 있고 원격 저장소를 계속 업데이트할 수 있음이 표시됩니다.

sudo git push --set-upstream origin master

관련 정보