커밋을 푸시하기 위해 GitHub 자격 증명을 캐시하는 방법이 있습니까? 문제로 인해

최근에 방화벽 문제로 인해 GitHub에서 리포지토리를 https : //로 동기화하기로 전환했으며 매번 비밀번호를 묻습니다.

매번 인증하는 대신 자격 증명을 캐시하는 방법이 git push있습니까?



답변

Git 버전 1.7.9 이상

Git 1.7.9 (2012 년 1 월 말에 출시) 이후 Git에는 자격 증명 도우미 라고하는 HTTP / HTTPS에 비밀번호를 항상 입력하지 않아도되는 깔끔한 메커니즘이 있습니다. ( 아래 의견에서이 새로운 기능을 지적 해 주신 dazonic 에게 감사 합니다.)

Git 1.7.9 이상에서는 다음 자격 증명 도우미 중 하나만 사용할 수 있습니다.

git config --global credential.helper cache

… Git에게 비밀번호를 메모리에 (기본적으로) 15 분 동안 캐시하도록 유지합니다. 다음을 사용하여 더 긴 시간 초과를 설정할 수 있습니다.

git config --global credential.helper "cache --timeout=3600"

(이 예제는 Linux 용 GitHub 도움말 페이지 에서 제안되었습니다 .) 필요한 경우 자격 증명을 영구적으로 저장할 수도 있습니다 (아래의 다른 답변 참조).

GitHub의의 도움 도 제안 당신이 맥 OS X에있어, 사용 된 경우 있음 브루 힘내을 설치, 당신이 네이티브 맥 OS X의 키 스토어를 사용할 수 있습니다 :

git config --global credential.helper osxkeychain

Windows의 경우 Windows 용 Git Credential Manager 또는 msysgit에 wincred 라는 도우미가 있습니다.

git config --global credential.helper wincred # obsolete

Windows 용 망할 놈의 2.7.3+ (2016 월) :

git config --global credential.helper manager

Linux의 경우gnome-keyring (또는 KWallet과 같은 다른 키링 구현)을 사용할있습니다 .

1.7.9 이전의 Git 버전

1.7.9 이전의 Git 버전에서는 이보다 안전한 옵션을 사용할 수 없으므로 origin원격에서 비밀번호를 포함시키기 위해 사용 하는 URL을 다음 과 같은 방식 으로 변경해야합니다 .

https://you:password@github.com/you/example.git

다시 말해 :password, 사용자 이름 뒤 및 앞에 @.

다음을 사용하여 origin리모컨 의 새 URL을 설정할 수 있습니다 .

git config remote.origin.url https://you:password@github.com/you/example.git

를 사용 https하고 있는지 확인하십시오. 이렇게하면 GitHub 비밀번호가 .git디렉토리 에 일반 텍스트로 저장되므로 바람직하지 않습니다.

모든 Git 버전 (0.99 이후 버전)

~/.netrc원격 URL에 비밀번호를 유지하는 것과 같이 비밀번호가 디스크에 일반 텍스트로 저장되므로 덜 안전하고 권장되지 않음을 의미하지만 다른 방법은 파일 에 사용자 이름과 비밀번호를 입력하는 것입니다. 그러나이 방법을 사용하려면 다음 줄을 추가하십시오 ~/.netrc.

machine <hostname> login <username> password <password>

… 대체 <hostname>서버의 호스트 이름으로, 그리고 <username><password>사용자 이름과 암호. 또한 해당 파일에 대해 제한적인 파일 시스템 권한을 설정해야합니다.

chmod 600 ~/.netrc

Windows에서는이 파일을 호출해야하며 _netrc% HOME % 환경 변수를 정의해야 할 수도 있습니다. 자세한 내용은 다음을 참조하십시오.


답변

다음을 사용하여 Git이 자격 증명을 영구적으로 저장하도록 할 수도 있습니다.

git config credential.helper store

참고 :이 방법은 편리하지만 Git은 프로젝트 디렉토리 아래의 로컬 파일 (.git-credentials)에 자격 증명을 일반 텍스트로 저장합니다 ( “home”디렉토리는 아래 참조). 마음에 들지 않으면이 파일을 삭제하고 캐시 옵션 사용으로 전환하십시오.

원격 저장소에 연결해야 할 때마다 Git이 자격 증명을 다시 요청하도록하려면 다음 명령을 실행할 수 있습니다.

git config --unset credential.helper

에서 암호를 저장하려면 .git-credentials당신의 %HOME%프로젝트 디렉토리에 반대 디렉토리를 사용하는 --global플래그

git config --global credential.helper store

답변

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-netrcgpggpg.program 옵션에 관계없이 ‘ ‘ 로 해독하도록 하드 코딩되었습니다 .
이것은 데비안과 같은 배포판에서 현대 GnuPG를 ‘ gpg2


Windows 용 단계별 지침

Windows의 경우 :

(Git은 gpg.exe배포판을 가지고 있지만 전체 GPG 설치를 사용하면 gpg-agent.exeGPG 키와 관련된 암호를 기억하는을 포함합니다 .)

( ‘ copy‘명령 : Git은 명령 ‘ gpg‘ 을 (를) 실행하려면 Bash 스크립트가 필요합니다 . gpg4win-vanilla-2와 함께 제공 되므로 gpg2.exe복제해야합니다.)

  • GPG 키를 작성하거나 가져 와서 신뢰하십시오.

    gpgp --import aKey
    # or
    gpg --gen-key

해당 키에 암호를 입력하십시오.

  • 그 열쇠를 믿어

  • 신임 헬퍼 스크립트를 다음 디렉토리에 설치하십시오 %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에서 작동합니다.)

  • 일반 텍스트로 _netrc 파일 만들기

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https

( 사용할 URL에 따라 ‘ protocol‘부분 : ‘ http‘또는 ‘ https‘을 잊지 마십시오 .)

  • 해당 파일을 암호화하십시오.

    gpg -e -r a_recipient _netrc

(이제 수 삭제할_netrc 만을 유지, 파일을 _netrc.gpg암호화 한.)

  • 암호화 된 파일을 사용하십시오.

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

( ‘ /‘: 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

contrib/credential/netrc: PERL_PATH구성 가능 하게 만들기

서명자 : Denton Liu

Perl 인터프리터의 shebang 경로 git-credential-netrc는 하드 코딩되었습니다.
그러나 일부 사용자는 다른 위치에있을 수 있으므로 스크립트를 수동으로 편집해야합니다.

.perl스크립트 에 접 두부를 추가하여 템플리트로 표시하고 생성 된 버전을 무시하십시오. 다른 Perl 스크립트와 마찬가지로 에서 생성되도록
확장하십시오 .Makefilegit-credential-netrcgit-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

contrib/credential/netrc: 레포 밖에서 일하십시오

서명자 : Denton Liu

현재 git-credential-netrcgit 저장소 외부에서는 작동하지 않습니다. 다음 오류와 함께 실패합니다.

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"

답변

HTTPS URL에 사용자 자격 증명을 저장하는 쉬운 방법은 다음과 같습니다.

https://user:password@github.com/...

당신은 URL을 변경할 수 있습니다 git remote set-url <remote-repo> <URL>

이 접근 방식의 명백한 단점은 비밀번호를 일반 텍스트로 저장해야한다는 것입니다. 사용자 이름 ( https://user@github.com/...) 만 입력하면 최소한 번거 로움을 덜 수 있습니다.

SSH로 전환하거나 GitHub 클라이언트 소프트웨어를 사용하는 것이 좋습니다.


답변

자격 증명 저장소를 사용하십시오.

에 힘내 2.11+를 들어 OS X리눅스 , 사용 망할 놈의 자격 증명 저장소에 내장 :

git config --global credential.helper libsecret

Windows에서 msysgit 1.7.9+의 경우 :

git config --global credential.helper wincred

OS X에서 Git 1.7.9+의 경우 :

git config --global credential.helper osxkeychain

답변

당신은 그냥 사용할 수 있습니다

git config credential.helper store

다음에 끌어 오기 또는 밀어 넣기로 비밀번호를 입력하면 파일 .git-credentials에 일반 텍스트로 저장됩니다 (비보안이지만 보호 된 폴더에 저장).

그리고이 페이지에 명시된 바와 같습니다.

git-credential-store


답변

도우미를 먼저 다운로드해야한다는 것이 즉시 분명하지 않았습니다! Atlassian의 Peritently Git 저장소로 인증 에서 credential.helper 다운로드를 찾았습니다 .

인용문:

OS X에서 자격 증명 캐싱과 함께 Git을 사용하려면 다음 단계를 따르십시오.

바이너리 git-credential-osxkeychain을 다운로드하십시오.

바이너리가 실행 가능한지 확인하려면 아래 명령을 실행하십시오.

chmod a+x git-credential-osxkeychain

디렉토리에 넣으십시오 /usr/local/bin.

아래 명령을 실행하십시오.

git config --global credential.helper osxkeychain