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


1867

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

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



2
이제 자격 증명 도우미를 사용 _netrc하여 자격 증명이 포함 된 파일 을 암호화 할 수 있습니다 . 아래 내 답변을 참조하십시오 . git-credential-winstore.exeWindows에서 약간 버그가있는 (메모리 캐시) 가 더 안전하다는 것을 알았습니다 .
VonC


git-credential-winstoreWindows에 가장 적합했습니다. 버기가 무엇입니까? ssh를 설정하는 것이 선호되는 옵션이지만, 여러 번 수행했지만 오류가 발생하기 쉽고 때로는 여러 호스트에 연결해야 할 때 일반 기능이 작동하지 않습니다.
브론 데이비스

2
"SSH 인증서"는 "SSH 개인 키"를 의미한다고 가정합니다.
Michael Mior

답변:


2369

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 % 환경 변수를 정의해야 할 수도 있습니다. 자세한 내용은 다음을 참조하십시오.


72
비밀번호를 일반 텍스트로 저장하지 마십시오. Git 1.7.9부터 자격 증명 도우미를 사용할 수 있습니다. git config --global credential.helper osxkeychainOS X에서 다른 OS를 참조하십시오 help.github.com/articles/set-up-git
dazonic

6
FWIW, osx 키 체인은 기본 GIT 소스 코드의 일부이며 Brew 또는 MacPorts의 독점 구성 요소가 아니거나이 달의 풍미가 무엇이든 아닙니다. 그리고 처음부터 자식을 만들 필요조차 없습니다. cd contrib / credential / osxkeychain /을 실행하고 make를 실행하십시오.
신시사이저

2
2 단계 인증을 사용하려면 github에서 Person Access Token 이라고하는 것을 사용해야합니다 . 실제로 비밀번호와 달리 액세스 권한을 제어 할 수 있으므로 항상 비밀번호를 사용해야합니다. URL의 비밀번호를 바꾸면으로 끝납니다 https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git. 디스크에 저장된 일반 텍스트 암호는 사용하기에 거의 안전합니다.
Russell Stuart

12
git config --global credential.helper cachewindows에서는 작동하지 않습니다 : stackoverflow.com/questions/11693074/… Windows에서 gitcredentialstore 를 사용 하십시오
Sebastian J.

8
이 시간 초과를 무한대로 설정하는 방법은 무엇입니까?
sudo

720

다음을 사용하여 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

7
Windows에서는 Windows Creditial Store에 GIT 암호의 암호화 된 버전을 저장하도록 구성하는 도우미 유틸리티를 다운로드 할 수 있습니다. confluence.atlassian.com/display/STASH/…
Contango

76
--global을 지정해야하거나 현재 저장소에 설정을 저장하려고합니다.git config --global credential.helper store
Brian Gordon

6
캐시가 영구적으로 저장되는 대신 왜합니까? 컴퓨터 나 다른 것을 공유하고 있습니까?
마이클 J. 칼 킨스

2
@BrianGordon Windows에서 GIT 1.9.5를 사용하고 있으며 --global플래그가 중복되었습니다. 이 플래그가 없어도 신임 정보 파일이 %USER_HOME%디렉토리 에 작성되었습니다 .
jFrenetic

2
일반 텍스트로 저장하지 않으면 무엇으로 보호됩니까? 너의 비밀번호? git에 연결할 때 관리자 암호를 묻지 않아도됩니까? 다른 비밀번호를 조금 이상하게하기 위해 비밀번호를 입력 할 필요가 없습니까?
Cruncher

101

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"

1
리눅스에서 똑같은 것을 시도해라. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d".. 그리고 나는 "git : 'credential-netrc'는 아니다 git 명령. 'git --help' "참조
sunny

4
@sunny 그게 curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc목적입니다 : git이 ' ' 를 호출 할 수 git-credential-netrc있도록 경로 ( $PATH) 의 아무 곳이나 복사해야합니다 credential-netrc.
VonC

글쎄, PC에서 _netrc나를 위해 일하지 않았지만 논쟁 이있는 youtube-dlWindows 7 에서 .netrc일 했습니다. --netrc
Iulian Onofrei

@VonC 현재 URL은 다음과 같습니다 https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(7 년 후 파이핑)
Gwyneth Llewelyn

1
트윗 담아 가기 그에 따라 답변을 편집했습니다. 사용되지 않는 다른 정보가 있으면 주저하지 말고 직접 편집하십시오.
VonC

43

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

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

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

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

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


2
사용자 이름 / 암호를 인코딩해야 할 수도 있습니다. stackoverflow.com/a/34611311/3906760
MrTux

43

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

에 힘내 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

2
나는 이것이 갈 길이라고 확신하지만 슬프게도 오류가 발생합니다.git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
codepleb

1
고맙지 만 어쨌든 같은 오류가 발생합니다. 내가 뭔가 잘못하고 있습니까? 명령을 입력했는데 아무 일도 일어나지 않습니다. 푸시하자마자 성공적으로 삽입하는 자격 증명을 묻는 메시지가 표시되지만 그 후에 git 명령이 아니라는 오류가 발생합니다.
codepleb

2
libsecret이 Linux에서 작동하기 전에 다음 단계를 수행해야합니다. stackoverflow.com/a/40312117/775800
Lavamantis

1
또 다른 것-Github에서 2FA를 활성화하면 암호가 작동하지 않습니다. 그러나 Github "Settings"페이지에서 개인 액세스 토큰을 생성 할 수 있으며 해당 토큰은 비밀번호로 작동합니다. github.com/github/hub/issues/822
Lavamantis가

3
보안 문제 : Windows 자격 증명 관리자는 Windows 계정에 로그인 한 모든 사람이 일반 텍스트 암호에 액세스 할 수 있도록합니다. 그들이해야 할 일은 자격 증명 관리자에게 요청을 보내는 것입니다 printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( 자세한 내용은 여기 참조 ). 항상 개인 액세스 토큰 을 사용하고 GitHub 계정에서 2FA를 사용해야합니다.
cjs

40

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

git config credential.helper store

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

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

git-credential-store


3
윈도우 2.7.3에 대한 힘내 (2016 월)의 경우 : github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 , 그 것 git config credential.helper manager대신에
VonC

23

도우미를 먼저 다운로드해야한다는 것이 즉시 분명하지 않았습니다! 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

23

URL의 일부로 로그인 자격 증명을 포함하기 만하면됩니다.

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

참고 :이 방법을 권장하지 않지만 서두르고 다른 방법으로 아무것도 작동하지 않으면이 방법을 사용할 수 있습니다.


12
그것은 당신이 탈출해야 작동합니다 @ 40 %로 당신의 이메일 ID에
Tarun 굽타에게

이메일 ID에 '+'가 있으면 어떻게합니까? 나는 같은 탈출을 시도했지만 푸시는 '레포를 찾을 수 없습니다'라고 말했다
killjoy

4
대신 +의 %의 2B가
Tarun 굽타

암호를 일반 텍스트로 저장하고 쉽게 액세스 할 수있는 암호는 최적의 솔루션이 아닐 수 있습니다.
활동 감소

20

GNU / Linux 설정에서 ~ / .netrc도 꽤 잘 작동합니다.

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Git이 HTTPS 전송에 사용하는 네트워크 라이브러리에 따라 달라질 수 있습니다 .


4
또한 확인하십시오 chmod 0600 ~/.netrc.
poolie

우분투 netrc 맨 페이지에 링크를 남기고 싶을 뿐이다 . 다른 사용자 (/home/git/.netrc) 용으로 만든 다음 소유권을 해당 사용자로 변경해야했습니다.
zacharydl

17

Windows의 경우 Git Credential Manager (GCM) 플러그인을 사용할 수 있습니다 . 현재 Microsoft에서 관리합니다. 좋은 점은 암호를 일반 텍스트가 아닌 Windows 자격 증명 저장소에 저장한다는 것입니다.

프로젝트 의 릴리스 페이지 에 설치 프로그램이 있습니다 . 자격 증명 관리자가 내장 된 Windows 용 Git 공식 버전도 설치 됩니다. GitHub (및 기타 서버)에 대한 2 단계 인증 을 허용 합니다. 초기 로그인을위한 그래픽 인터페이스가 있습니다.

Cygwin 사용자 (또는 이미 공식 Git for Windows를 사용중인 사용자)의 경우 수동 설치를 선호 할 수 있습니다. 릴리스 페이지 에서 zip 패키지를 다운로드 하십시오 . 패키지를 추출한 후 install.cmd파일 을 실행 하십시오. ~/bin폴더에 설치됩니다 . ( ~/bin디렉토리가 PATH에 있는지 확인하십시오 .) 그런 다음이 명령을 사용하여 구성하십시오.

git config --global credential.helper manager

그런 다음 Git은 git-credential-manager.exe서버 인증시 를 실행 합니다.


3
귀하의 계정에 로그인 한 사람은 누구나 비밀번호의 일반 텍스트에 쉽게 액세스 할 수 있습니다. 그들이해야 할 일은 자격 증명 관리자에게 요청을 보내는 것입니다 printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( 자세한 내용은 여기 참조 ). 항상 개인 액세스 토큰 을 사용하고 GitHub 계정에서 2FA를 사용해야합니다.
cjs

13

Mark가 말한 것처럼 비밀번호를 일반 텍스트로 저장하지 않으려면 푸시와 다른 GitHub URL을 사용하여 가져올 수 있습니다. 구성 파일의 아래에서 [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

최소한 오픈 소스 프로젝트의 경우 푸시 할 때 비밀번호를 입력하지만 가져올 때는 비밀번호를 묻지 않습니다.


12

OAuth

고유 한 개인 API 토큰 ( OAuth )을 작성하고 일반 신임 정보를 사용하는 것과 동일한 방식으로 사용할 수 있습니다 ( :)/settings/tokens . 예를 들면 다음과 같습니다.

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

다른 방법은 ~/.netrc( _netrc예 : Windows) 에서 사용자 / 암호를 구성하는 것입니다.

machine github.com
login USERNAME
password PASSWORD

HTTPS의 경우 추가 라인을 추가하십시오.

protocol https

자격 증명 도우미

HTTPS를 사용할 때 Git에서 GitHub 비밀번호캐싱하기 위해 자격 증명 도우미 를 사용 하여 GitHub와 대화 할 때마다 GitHub 사용자 이름과 비밀번호를 기억하도록 Git에 지시 할 수 있습니다.

  • 맥 : git config --global credential.helper osxkeychain(osxkeychain helper 필수),
  • 윈도우 : git config --global credential.helper wincred
  • 리눅스 및 기타 : git config --global credential.helper cache

관련 :


10

자격 증명 도우미를 사용할 수 있습니다.

git config --global credential.helper 'cache --timeout=x'

여기서 x초 수입니다.


7
그것은 몇 초입니다 ... 어떤 천재는 그것을 밀리 초로 업데이트했으며 모두가 확인하지 않고 그것을 승인했습니다. 답을 모른다면 사람들을 오도하지 마십시오. 감사!
Charan

당신은 장소에 대한 링크를 제공 할 수 있습니다 store, cache다른 일반적인 것들을 나열하고 설명하고 있습니까?
Notinlist

3
'캐시'를 먼저 관리자로 사용하기 위해 다른 특정 명령을 호출하지 않으면 이것이 잭 똥을 낸다는 사실을 언급합니까? 이 물건은 매우 비밀 스럽고이 모든 답변은 불완전하며 아무도 작동하지 않습니다. 엄청나게 실망스러운. 대신 이것을보십시오 : stackoverflow.com/a/24800870/88409
Triynko

10

저장소를 복제 한 후 아래와 같이 구성을 repo편집 repo/.git/config하고 추가 할 수 있습니다.

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

그럼 당신은 요구되지 않습니다 usernamepassword다시.


나와 함께 작동 helper = manager하지만 첫 번째 푸시에는 username + repo가 ​​필요합니다.
Stéphane Laurent

helper = manager로 오류가 발생했습니다. credential-manager는 git 명령이 아닙니다
Kapil

불행히도 git은 구성 파일의 비밀번호를 무시합니다. credential.store가있는 .git_credentials가 유일한 옵션입니다.
Avamander

9

나는 이것이 안전한 솔루션이 아니라는 것을 알고 있지만 때로는 다른 것을 설치하지 않고 간단한 솔루션이 필요할 때가 있습니다. 그리고 도우미 = 상점 이후 가 나를 위해 작동하지 않았기 때문에 더미 도우미를 만들었습니다.

스크립트를 작성하고 여기에 credfake 라는 사용자 bin 폴더에 넣으십시오 .이 스크립트는 사용자 이름과 비밀번호를 제공합니다.

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

그것을 실행 가능하게 만드십시오 :

chmod u+x /home/mahuser/bin/credfake

그런 다음 git에서 구성하십시오.

git config --global credential.helper /home/mahuser/bin/credfake

(또는 하나의 리포지토리에만 --global없이 사용)

그리고-voilá-git은이 사용자 + 비밀번호를 사용합니다.


동의한다. 간단한 (안전하지 않은 경우) 솔루션. 하고있는 일을 아는 한 +1.
VonC

7

계정 비밀번호 대신 인증 토큰을 사용해야합니다. GitHub 설정 / 응용 프로그램으로 이동 한 다음 개인 액세스 토큰을 만듭니다. 토큰을 사용하는 것과 같은 방식으로 토큰을 사용할 수 있습니다.

토큰은 사용자가 프로젝트 작업에 계정 비밀번호를 사용하지 못하도록하기위한 것입니다. 관리 작업을 수행 할 때 새 토큰을 만들거나 이전 토큰을 철회하는 등의 암호 만 사용하십시오.


사용자에게 GitHub 계정에 대한 전체 액세스 권한을 부여하는 토큰 또는 비밀번호 대신, 프로젝트 특정 배포 키를 사용하여 단일 프로젝트 저장소에 대한 액세스 권한을 부여 할 수 있습니다. 일반 자격 증명으로 다른 Git 계정 또는 프로젝트에 계속 액세스 할 수있는 경우 다음 단계에서이 다른 키를 사용하도록 Git 프로젝트를 구성 할 수 있습니다.

  1. 를 포함하는 SSH 구성 파일 작성 Host, IdentityFile어쩌면 배포 키를 들어 UserKnownHostsFile, 어쩌면 User(I 생각하지만 당신은 그것을 필요하지 않습니다).
  2. 사실상 SSH 래퍼 쉘 스크립트 작성 ssh -F /path/to/your/config $*
  3. GIT_SSH=/path/to/your/wrapper일반적인 Git 명령 앞에 추가 하십시오. 여기서 git remote(원점) git@github.com:user/project.git형식을 사용해야 합니다.

7

보안을 위해 자격 증명을 사용하는 것이 좋지만 캐시를 사용하여 얼마 동안 유지할 수 있습니다.

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

자격 증명이 3600 초 동안 저장됩니다.


3600 초 후에 비밀번호를 다시 입력해야합니다. 영구적으로 저장하는 방법?
HoangVu

$ git config credential.helper 'cache --timeout = 3600'오류 : 설정 파일을 잠글 수 없습니다. git / config : 해당 파일 또는 디렉토리가 없습니다
PlantationGator

이것은 일 : 자식 설정 --global credential.helper '캐시 --timeout = 3600'
PlantationGator

@Tama 3 년이 지났다는 것을 알고 있지만 그냥 나가면 --timeout자격 증명이 영원히 저장됩니다.
Neil Chowdhury

Docker 컨테이너 내에서 작동 windowsservercore합니까?
피터 Mortensen

5

내가 2 단계 인증 을 사용하는 경우 상황이 약간 다릅니다 . 다른 곳에서 좋은 대답을 찾지 못했기 때문에 나중에 찾을 수 있도록 여기에 하나를 붙일 것입니다.

이중 인증을 사용하는 경우 사용자 이름 / 암호를 지정해도 작동하지 않습니다. 액세스가 거부됩니다. 그러나 응용 프로그램 액세스 토큰을 사용하고 Git의 자격 증명 도우미를 사용하여 캐시 할 수 있습니다. 관련 링크는 다음과 같습니다.

그리고 나는 이것을 어디에서 보았는지 기억하지 못하지만 사용자 이름을 물을 때 응용 프로그램 액세스 토큰을 사용하는 곳입니다. 그런 다음 암호를 비워 두십시오. 내 Mac에서 작동했습니다.


양방향 인증을 사용하는 경우 "액세스 토큰"을 비밀번호로 사용합니다. 사용자 이름 숙박 항상 같은
벤 Yitzhaki


4

일반적으로 이와 같은 원격 URL이 있습니다.

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

를 사용하는 동안 사용자 이름과 비밀번호를 건너 뛰려면 다음을 git push시도하십시오.

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

방금 동일한 URL (비밀번호를 포함한 사용자 세부 정보 포함)을 출처에 추가했습니다.

참고 : username이 전자 메일 ID 인 경우 작동하지 않습니다.

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)

3

gitcredentials (7) Manual Page 에서 답변을 받았습니다 . 필자의 경우 Windows 설치에 자격 증명 캐시가 없습니다. 자격 증명 저장소를 사용합니다.

credential-store를 사용하면 사용자 이름 / 암호가 [user folder] /. git-credentials 파일에 저장됩니다. 사용자 이름 / 비밀번호를 제거하려면 파일 내용을 삭제하십시오.


2
귀하의 창에 자격 증명 캐시가 없으면 git config --global credential.helper wincred이 저장소를 암호를 영구적으로 사용하는 것이 좋습니다 .
Chetabahana

2

작곡가 문서는 언급 이 같은 역할을 있도록의 GitHub의 API를 사용하는 것을 방지 할 수있는 git clone:

GitHub 리포지토리 에서 no-api키를 설정 true하면 GitHub API를 사용하는 대신 다른 Git 리포지토리와 마찬가지로 리포지토리가 복제됩니다. 그러나 git드라이버를 직접 사용하는 것과 달리 작곡가는 여전히 GitHub의 zip 파일을 사용하려고 시도합니다.

따라서 섹션은 다음과 같습니다.

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

API는 이유가 있다는 것을 명심하십시오. 따라서 이것은 github.com의 증가 된 부하에 관한 최후의 수단이어야합니다.


이 답변이 원래 질문과 어떤 관련이 있는지 확실하지 않습니다.
Charles Oppermann

2

bashrc 도 편집하십시오. 파일을 스크립트를 추가하십시오.

이것은 Git을 시작할 때 암호를 한 번 요청한 다음 로그 오프 할 때까지 기억합니다.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

0

당신이 사용하는 경우 osxkeychain 와 가진 다음 단계를 수행 만료를 업데이트 할 토큰 :

터미널에서 실행 한 다음 Enter 키를 두 번 누릅니다.

git credential-osxkeychain erase
 host=github.com
 protocol=https

이제 사용자 이름 / 암호를 입력하라는 메시지가 나타납니다. 그러나 때로는 이것이 '취득'하지 않는 것처럼 보이며 다시 입력해야합니다.

그렇다면 컴퓨터를 다시 시작하십시오 . 다음에 git 명령을 실행하고 사용자 이름 / 암호를 입력하면 저장됩니다.

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