나는 사용한다관리자를 기다려주세요다양한 운영 체제 구성을 버전 제어에 적용합니다. 지금까지는 로컬 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