다음과 같은 스크립트에서 자식 저장소를 복제하고 있습니다.
git clone https://user:password@host.com/name/.git
이것은 작동하지만 내 사용자 이름과 암호! 은의 원래 URL에 저장됩니다 .git/config
.
이를 방지 할 수는 있지만 여전히 스크립트에서이를 수행 할 수 있습니다 (따라서 수동 비밀번호 입력 없음)?
다음과 같은 스크립트에서 자식 저장소를 복제하고 있습니다.
git clone https://user:password@host.com/name/.git
이것은 작동하지만 내 사용자 이름과 암호! 은의 원래 URL에 저장됩니다 .git/config
.
이를 방지 할 수는 있지만 여전히 스크립트에서이를 수행 할 수 있습니다 (따라서 수동 비밀번호 입력 없음)?
답변:
내가 사용하는 방법은 실제로 git pull
복제본 대신에 복제본을 사용하는 것입니다. 스크립트는 다음과 같습니다.
mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:password@github.com/name/repo.git master
사용자 이름이나 비밀번호는에 저장되지 않습니다 .git/config
. 그러나 다른 단계를 수행하지 않으면 현재 프로세스 (예 :)를 표시하는 명령에서 프로세스가 실행되는 동안 일반 텍스트 사용자 이름과 비밀번호가 표시됩니다 ps
.
ssh를 사용할 수없는 경우 한 가지 더 제안은 실제로는 일반 텍스트 사용자 이름 / 암호 대신 OAuth 토큰을 사용하는 것입니다. 프로파일 설정 ( https://github.com/settings/tokens) 에서 OAuth 토큰을 생성 할 수 있습니다 .
그런 다음 해당 토큰을 사용하여 pull 명령은
git pull https://$OAUTH_TOKEN:x-oauth-basic@github.com/name/repo.git master
ps
최고의 솔루션 인 IMO는 맞춤형 GIT_ASKPASS
도우미를 사용하고 다른 환경 변수로 암호를 제공합니다. 예를 들어, git-askpass-helper.sh
다음과 같이 파일 을 작성하십시오 .
#!/bin/sh
exec echo "$GIT_PASSWORD"
다음 실행 git clone https://username@hostname/repo
환경 변수 GIT_ASKPASS=/path/to/git-askpass-helper.sh
와 GIT_PASSWORD=nuclearlaunchcodes
.
이는 프로세스 목록에도 비밀번호가 표시되지 않는 이점이 있습니다.
git pull
솔루션 보다 약간 더 안전하며 선택한 자동 배포 도구에서 일반 텍스트 암호를 비밀로 저장할 수 있습니다.
~/.netrc
파일에 연결 자격 증명을 입력 할 수 있습니다 . 다음과 같은 내용이 있습니다.
machine host.example.net
login bart
password eatmyshorts
해당 파일을 600으로 chmod하십시오. Windows를 사용하는 경우 다음 링크가 유용 할 수 있습니다. https://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on- Windows-to-Save 사용자 및 비밀번호
개인적으로 인증 목적으로 SSH 키를 사용하는 경향이 있습니다 (물론 허용되는 경우).
이상 진행 후 수십 등 SO 게시물, 블로그,의, 나는 밖으로 시도 모든 방법을, 그리고 이것이 내가 생각 해낸 것입니다. 모든 것을 다룹니다.
이것은 대화식 비밀 번호 프롬프트없이 저장소를 복제하기 위해 git을 안전하게 인증 할 수있는 모든 방법과 도구 입니다.
여기에서 요청한 것 중에서 SSH 키 GIT_ASKPASS
또는 git credential store
OS 키 체인 관리자를 사용하는 것이 가장 좋습니다.
GIT_ASKPASS는 아마도 3에 대해 가장 잘 이해되지 않았으므로 여기에 자세히 설명하고 다른 것은 치트 시트에 있습니다.
GIT_ASKPASS
스크립트 를 만드는 방법 :
echo 'echo $MY_GIT_TOKEN' > $HOME/.git-askpass
이것을 어떻게 사용 하는가:
export MY_GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export GIT_ASKPASS=$HOME/.git-askpass
git clone https://token@code.example.com/project.git
스크립트는 다음과 같은 형식으로 stdin을받습니다.
Password for 'scheme://host.tld':
스크립트는 다음과 같은 Git ENV를받습니다.
GIT_DIR=/Users/me/project/.git
GIT_EXEC_PATH=/usr/local/Cellar/git/2.19.0_1/libexec/git-core
GIT_PREFIX=
치트 시트에 자세한 내용이 있습니다.
git remote set-url origin https://host.com/name/.git