TLDR; Git 1.8.3+와 함께 암호화 된 netrc 파일을 사용하십시오 .
Git 리포지토리 HTTPS URL의 비밀번호 저장은 Windows 의 ~/.netrc
(Unix) 또는 %HOME%/_netrc
(참고 _
)로 가능합니다.
그러나 : 해당 파일은 비밀번호를 일반 텍스트로 저장합니다.
해결책 : GPG (GNU Privacy Guard)로 파일을 암호화 하고 암호가 필요할 때마다 ( push
/ pull
/ fetch
/ clone
작업용) Git의 암호를 해독하십시오 .
참고 : Git 2.18 (Q2 2018)에서는 이제 암호화 된 .netrc
파일 을 해독하는 데 사용되는 GPG를 사용자 정의 할 수 있습니다 .
Luis Marsano (``)의 commit 786ef50 , commit f07eeed (2018 년 5 월 12 일)를 참조하십시오 . ( Junio C Hamano 에 의해 병합 - 커밋 017b7c5 , 2018 년 5 월 30 일)
gitster
git-credential-netrc
: gpg
옵션을 수락
git-credential-netrc
gpg
gpg.program 옵션에 관계없이 ' ' 로 해독하도록 하드 코딩되었습니다 .
이것은 데비안과 같은 배포판에서 현대 GnuPG를 ' gpg2
'
Windows 용 단계별 지침
Windows의 경우 :
(Git은 gpg.exe
배포판을 가지고 있지만 전체 GPG 설치를 사용하면 gpg-agent.exe
GPG 키와 관련된 암호를 기억하는을 포함합니다 .)
( ' copy
'명령 : Git은 명령 ' gpg
' 을 (를) 실행하려면 Bash 스크립트가 필요합니다 . gpg4win-vanilla-2
와 함께 제공 되므로 gpg2.exe
복제해야합니다.)
해당 키에 암호를 입력하십시오.
그 열쇠를 믿어
신임 헬퍼 스크립트를 다음 디렉토리에 설치하십시오 %PATH%
.
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(주의 : Git 2.25.x / 2.26에서 스크립트 이름이 변경되었습니다 (아래 참조))
(예, 이것은 Bash 스크립트이지만 Git에서 호출하기 때문에 Windows에서 작동합니다.)
( 사용할 URL에 따라 ' protocol
'부분 : ' http
'또는 ' https
'을 잊지 마십시오 .)
(이제 수 삭제할_netrc
만을 유지, 파일을 _netrc.gpg
암호화 한.)
( ' /
': C:\path\to...
전혀 작동하지 않습니다.) (처음 -v -d
에는 어떤 일이 일어나고 있는지 확인할 수 있습니다 .)
이제부터 인증이 필요한 HTTP (S) URL을 사용하는 Git 명령은 해당 _netrc.gpg
파일 을 해독 하고 접속중인 서버와 관련된 로그인 / 암호를 사용합니다. GPG는 처음으로 파일을 해독하기 위해 GPG 키의 암호를 묻습니다. 다른 경우 에는 첫 번째 GPG 호출에 의해 자동으로 시작된 gpg-agent 가 해당 암호를 제공합니다.
이렇게하면 하나의 파일에 여러 URL / 로그인 / 암호를 암기 하고 디스크에 암호화하여 저장할 수 있습니다.
"캐시"도우미보다 편리합니다. 여기서 각 원격 서비스에 대해 다른 암호를 기억하고 입력 (세션 당 한 번)해야합니다. 암호는 메모리에 캐시됩니다.
Git 2.26 (Q1 2020)에서는 사용할 수있는 샘플 자격 증명 도우미 .netrc
가 기본적으로 작동하도록 업데이트되었습니다. 패치 / 토론을 참조하십시오 .
Denton Liu ( )의 commit 6579d93 , commit 1c78c78 (2019 년 12 월 20 일)를 참조하십시오 . ( Junio C Hamano 에 의해 병합 -- 커밋 1fd27f8 , 2019 년 12 월 25 일)Denton-L
gitster
서명자 : Denton Liu
Perl 인터프리터의 shebang 경로 git-credential-netrc
는 하드 코딩되었습니다.
그러나 일부 사용자는 다른 위치에있을 수 있으므로 스크립트를 수동으로 편집해야합니다.
.perl
스크립트 에 접 두부를 추가하여 템플리트로 표시하고 생성 된 버전을 무시하십시오. 다른 Perl 스크립트와 마찬가지로 에서 생성되도록
확장하십시오 .Makefile
git-credential-netrc
git-credential-netrc.perl
Makefile 레시피는 뻔뻔스럽게 도난당했습니다 contrib/mw-to-git/Makefile
.
과:
2.26 (Q1 2020)에서는 .netrc 사용을위한 샘플 자격 증명 도우미가 기본적으로 작동하도록 업데이트되었습니다.
Denton Liu ( )의 commit 6579d93 , commit 1c78c78 (2019 년 12 월 20 일)를 참조하십시오 . ( Junio C Hamano 에 의해 병합 -- 커밋 1fd27f8 , 2019 년 12 월 25 일)Denton-L
gitster
서명자 : Denton Liu
현재 git-credential-netrc
git 저장소 외부에서는 작동하지 않습니다. 다음 오류와 함께 실패합니다.
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
그래도 저장소 내에 있어야하는 실제 이유는 없습니다. 자격 증명 도우미는 저장소 외부에서도 잘 작동 할 수 있어야합니다.
자체 버전이 아닌 버전을 호출하여 더 이상 저장소 내에서 실행할 필요 config()
가 git-credential-netrc
없습니다.
Jeff King ( peff
)은 다음을 추가합니다.
gpg 암호화 된 것을 사용한다고 가정합니다 netrc
(그렇지 않으면 아마도을 사용해야합니다 credential-store
).
"읽기 전용"비밀번호 액세스의 경우 다음 pass
과 같이 config와의 조합 이 더 좋습니다.
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"