스크립트에서 git clone에 사용자 이름 / 암호를 제공하지만 .git / config에 자격 증명을 저장하지 않는 방법


31

다음과 같은 스크립트에서 자식 저장소를 복제하고 있습니다.

git clone https://user:password@host.com/name/.git

이것은 작동하지만 내 사용자 이름과 암호! 은의 원래 URL에 저장됩니다 .git/config.

이를 방지 할 수는 있지만 여전히 스크립트에서이를 수행 할 수 있습니다 (따라서 수동 비밀번호 입력 없음)?


나중에 원점을 업데이트 할 수 있습니다.git remote set-url origin https://host.com/name/.git
ceejayoz

@ceejayoz 네, 가능합니다. 아이디어 주셔서 감사합니다. 자격 증명을 임시로 저장하지 않는 솔루션을 여전히 기대하고 있습니다.
Nathan

4
물론-키와 함께 SSH 기반 인증을 사용하십시오.
ceejayoz

2
SSH 대신 https를 사용하는 이유가 있습니까? SSH는 키를 지원합니다.
mzhaase 2016

질문을 이해하지만 암호가 스크립트 안에 저장되어있는 이유는 무엇입니까? 똑같이 나쁘다.
Martijn Courteaux 2

답변:


20

내가 사용하는 방법은 실제로 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

인증 토큰을 사용할 수 없습니다. github을 사용하지 않고 개인 서버를 사용하고 있습니다.
Nathan

3
예를 들어 ps
풀이

맹세 사용법. 프로덕션 / 스테이징 / dev에 필요한 것입니다.
RobotHumans

친구에게 백만 감사합니다. 시간 낭비 n 시간 n 마침내 당신의 대답이 다시 나타났습니다. : thumbsup
JasdeepSingh

17

최고의 솔루션 인 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.shGIT_PASSWORD=nuclearlaunchcodes.

이는 프로세스 목록에도 비밀번호가 표시되지 않는 이점이 있습니다.


창의적인 솔루션을 위해 +1 이것은 git pull솔루션 보다 약간 더 안전하며 선택한 자동 배포 도구에서 일반 텍스트 암호를 비밀로 저장할 수 있습니다.
FGreg

13

~/.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 키를 사용하는 경향이 있습니다 (물론 허용되는 경우).


글쎄, 이것은 ~ / .netrc 안에 내 비밀번호를 남길 것입니다. 나는 또한 그것을 원하지 않습니다.
Nathan

2

이상 진행 후 수십 등 SO 게시물, 블로그,의, 나는 밖으로 시도 모든 방법을, 그리고 이것이 내가 생각 해낸 것입니다. 모든 것을 다룹니다.

참조 힘내 자격 증명 및 개인 패키지 쪽지를

이것은 대화식 비밀 번호 프롬프트없이 저장소를 복제하기 위해 git을 안전하게 인증 할 수있는 모든 방법과 도구 입니다.

  • SSH 공개 키
    • SSH_ASKPASS
  • API 액세스 토큰
    • GIT_ASKPASS
    • .gitconfig 대신
    • .gitconfig [인증서]
    • .git 자격 증명
    • .netrc
  • 보너스 : 개인 패키지와 연동
    • 노드 / npm package.json
    • 파이썬 / 핍 / 계란 요구 사항 .txt
    • 루비 보석 Gemfile
    • golang go.mod

일반 텍스트 스토리지가없는 최상의 옵션

여기에서 요청한 것 중에서 SSH 키 GIT_ASKPASS또는 git credential storeOS 키 체인 관리자를 사용하는 것이 가장 좋습니다.

GIT_ASKPASS는 아마도 3에 대해 가장 잘 이해되지 않았으므로 여기에 자세히 설명하고 다른 것은 치트 시트에 있습니다.

GIT_ASKPASS

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=

치트 시트에 자세한 내용이 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.