최근에 GitHub(방화벽 문제로 인해)에서 내 리포지토리를 https://로 동기화하도록 전환했으며 매번 암호를 묻습니다.
git push
할 때마다 인증하는 대신 자격 증명을 캐시하는 방법이 있습니까?
질문자 :Zepplock
최근에 GitHub(방화벽 문제로 인해)에서 내 리포지토리를 https://로 동기화하도록 전환했으며 매번 암호를 묻습니다.
git push
할 때마다 인증하는 대신 자격 증명을 캐시하는 방법이 있습니까?
Git 1.7.9(2012년 1월 말에 릴리스됨) 이후로 Git에는 자격 증명 도우미 라고 하는 HTTP/HTTPS에 대해 항상 암호를 입력하지 않아도 되는 깔끔한 메커니즘이 있습니다. (아래 의견에서 이 새로운 기능을 지적해 주신 dazonic 에게 감사드립니다.)
Git 1.7.9 이상에서는 다음 자격 증명 도우미 중 하나를 사용할 수 있습니다.
git config --global credential.helper cache
credential.helper 캐시 값 은 특정 시간(분) 동안 암호를 메모리에 캐시된 상태로 유지하도록 Git에 지시합니다. 기본값은 15분이며 다음을 사용하여 더 긴 시간 초과를 설정할 수 있습니다.
git config --global credential.helper "cache --timeout=3600"
캐시를 1시간 동안 설정하거나:
git config --global credential.helper "cache --timeout=86400"
1일 동안. 원하는 경우 자격 증명을 영구적으로 저장할 수도 있습니다. 아래의 다른 답변을 참조하십시오.
GitHub의 도움말은 또한 Mac OS X에 있고Homebrew 를 사용하여 Git을 설치하는 경우 다음과 함께 기본 Mac OS X 키 저장소를 사용할 수 있다고 제안합니다.
git config --global credential.helper osxkeychain
Windows의 경우 Windows용 Git Credential Manager 또는 msysgit에 wincred 라는 도우미가 있습니다.
git config --global credential.helper wincred # obsolete
Windows용 Git 2.7.3 이상 (2016년 3월):
git config --global credential.helper manager
Linux의 경우 (2011년에) gnome-keyring
(또는 KWallet과 같은 다른 키링 구현)을 사용합니다.
요즘(2020년)에는 (Linux에서)
sudo dnf install git-credential-libsecret git config --global credential.helper /usr/libexec/git-core/git-credential-libsecret
sudo apt-get install libsecret-1-0 libsecret-1-dev cd /usr/share/doc/git/contrib/credential/libsecret sudo make git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
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
디렉토리에 일반 텍스트로 저장되며 이는 분명히 바람직하지 않습니다.
~/.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)에 일반 텍스트로 자격 증명을 저장합니다("홈" 디렉토리는 아래 참조). 이 파일이 마음에 들지 않으면 이 파일을 삭제하고 캐시 옵션을 사용하도록 전환하세요.
Git이 원격 리포지토리에 연결해야 할 때마다 자격 증명을 다시 요청하도록 하려면 다음 명령을 실행할 수 있습니다.
git config --unset credential.helper
프로젝트 디렉토리가 아닌 %HOME%
.git-credentials
에 비밀번호를 저장하려면 --global
플래그를 사용하세요.
git config --global credential.helper store
Git 리포지토리 HTTPS URL의 비밀번호는 ~/.netrc
(Unix) 또는 %HOME%/_netrc
_
참고)를 사용하여 저장할 수 있습니다.
하지만 : 그 파일은 암호를 일반 텍스트로 저장합니다.
솔루션 : 해당 파일을 GPG(GNU Privacy Guard)로 암호화하고 암호가 필요할 때마다 Git이 암호를 해독하도록 합니다( push
/ pull
/ fetch
/ clone
작업용).
참고: Git 2.18(2018년 2분기)에서는 이제 암호화된 .netrc
파일을 해독하는 데 사용되는 GPG를 사용자 지정할 수 있습니다.
Luis Marsano(``)의 commit 786ef50 , commit f07eeed (2018년 5월 12일)를 참조하십시오.
(2018년 5월 30일 커밋 017b7c5 에서 Junio C gitster
-- gitster -- 병합)
git-credential-netrc
:gpg
옵션 수락
git-credential-netrc
는 gpg.program 옵션에 관계없이gpg
'로 해독하도록 하드코딩되었습니다.
gpg2
'와 같이 현대식 GnuPG를 다른 것으로 부르는 데비안과 같은 배포판의 문제입니다.
Windows:
(Git에는 gpg.exe
가 있지만 전체 GPG 설치를 사용하면 gpg-agent.exe
포함되어 GPG 키와 연결된 암호를 기억합니다.)
최소 gnupg 명령줄 인터페이스인 gpg4Win Lite
설치 하고(최신 gpg4win-vanilla-2.XY-betaZZ.exe
) GPG 설치 디렉터리로 PATH를 완성합니다.
set PATH=%PATH%:C:\path\to\gpg copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(' copy
gpg
' 명령을 실행하기 위해 Bash 스크립트가 필요합니다 gpg4win-vanilla-2
gpg2.exe
와 함께 제공되므로 이를 복제해야 합니다.)
GPG 키 생성 또는 가져오기 및 신뢰:
gpgp --import aKey # or gpg --gen-key
(해당 키에 암호를 입력해야 합니다.)
%PATH%
내의 디렉토리에 자격 증명 도우미 스크립트를 설치합니다.
cd c:\a\fodler\in\your\path curl -oc:\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.gpg
암호화된 파일만 유지하면서 _netrc
파일을 삭제할 수 있습니다.)
암호화된 파일 사용:
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(2020년 1분기)에서는 .netrc
를 사용하기 위한 샘플 자격 증명 도우미가 기본적으로 작동하도록 업데이트되었습니다. 패치/토론을 참조하십시오.
Denton Liu( Denton-L
)의 commit 6579d93 , commit 1c78c78 (2019년 12월 20일)을 참조하십시오.
(2019년 12월 25일 1fd27f8 커밋 에서 Junio C gitster
-- gitster -- 병합)
contrib/credential/netrc
:PERL_PATH
구성 가능사인오프: Denton Liu
git-credential-netrc
에서 Perl 인터프리터를 위한 shebang 경로가 하드코딩되었습니다.
그러나 일부 사용자는 스크립트가 다른 위치에 있을 수 있으므로 스크립트를 수동으로 편집해야 했습니다.
.perl
접두사를 추가하여 템플릿으로 표시하고 생성된 버전을 무시합니다.
다른 Perl 스크립트와 마찬가지로git-credential-netrc.perl
에서git-credential-netrc
를 생성하도록Makefile
확장합니다.
contrib/mw-to-git/Makefile
에서 뻔뻔하게 도난당했습니다.
그리고:
2.26(2020년 1분기)에서는 .netrc를 사용하기 위한 샘플 자격 증명 도우미가 기본적으로 작동하도록 업데이트되었습니다.
Denton Liu( Denton-L
)의 commit 6579d93 , commit 1c78c78 (2019년 12월 20일)을 참조하십시오.
(2019년 12월 25일 1fd27f8 커밋 에서 Junio C gitster
-- gitster -- 병합)
contrib/credential/netrc
: 저장소 외부에서 작업사인오프: Denton Liu
현재
git-credential-netrc
는 git 저장소 외부에서 작동하지 않습니다. 다음 오류와 함께 실패합니다.fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
그러나 저장소 내에 있어야 할 실제 이유는 없습니다. 자격 증명 도우미는 저장소 외부에서도 잘 작동할 수 있어야 합니다.
git-credential-netrc
가 더 이상 저장소 내에서 실행될 필요가 없도록config()
의 비자기 버전을 호출합니다.
Jeff King( peff
)은 다음과 같이 덧붙입니다.
나는 당신이 gpg-encrypted
netrc
사용하고 있다고 가정합니다 (그렇지 않다면 아마도credential-store
사용해야 할 것입니다).
"읽기 전용" 암호 액세스의 경우 다음pass
의 조합이 조금 더 좋습니다.[credential "https://github.com"] username = peff helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"
자격 증명 저장소를 사용합니다.
OS X 및 Linux의 Git 2.11+ 의 경우 Git의 내장 자격 증명 저장소를 사용합니다 .
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
HTTPS URL에 사용자 자격 증명을 저장하는 쉽고 오래된 방식이 있습니다.
https://user:password@github.com/...
git remote set-url <remote-repo> <URL>
사용하여 URL을 변경할 수 있습니다.
이 접근 방식의 명백한 단점은 암호를 일반 텍스트로 저장해야 한다는 것입니다. 사용자 이름( https://user@github.com/...
)을 입력하면 최소한 번거로움을 줄일 수 있습니다.
SSH로 전환하거나 GitHub 클라이언트 소프트웨어를 사용하는 것이 좋습니다.
그냥 사용할 수 있습니다
git config credential.helper store
다음에 pull 또는 push로 비밀번호를 입력하면 .git-credentials 파일에 일반 텍스트로 저장됩니다(약간 안전하지 않지만 보호된 폴더에 넣으세요).
이 페이지에 명시된 바와 같이 그게 전부입니다.
도우미를 먼저 다운로드해야 한다는 사실이 즉시 명확하지 않았습니다! Atlassian의 Permanently authentication with Git 리포지토리 에서 credential.helper 다운로드를 찾았습니다.
인용하다:
OS X에서 자격 증명 캐싱과 함께 Git을 사용하려면 다음 단계를 따르십시오.
바이너리 git-credential-osxkeychain을 다운로드합니다.
아래 명령을 실행하여 바이너리가 실행 가능한지 확인하십시오.
chmod a+x git-credential-osxkeychain
/usr/local/bin
디렉토리에 넣으십시오.
아래 명령을 실행합니다.
git config --global credential.helper osxkeychain
URL의 일부로 로그인 자격 증명을 포함하기만 하면 됩니다.
git remote rm origin git remote add origin https://username:mypassword@github.com/path/to/repo.git
참고: 이 방법은 권장하지 않지만 급하고 다른 방법이 없으면 이 방법을 사용할 수 있습니다.
GNU/Linux 설정에서 ~/.netrc도 아주 잘 작동합니다.
$ cat ~/.netrc machine github.com login lot105 password howsyafather
Git이 HTTPS 전송에 사용하는 네트워크 라이브러리에 따라 다를 수 있습니다.
Windows의 경우GCM(Git Credential Manager ) 플러그인을 사용할 수 있습니다. 현재 Microsoft에서 관리하고 있습니다. 좋은 점은 암호를 일반 텍스트가 아닌 Windows 자격 증명 저장소에 저장한다는 것입니다.
프로젝트 의 릴리스 페이지 에 설치 프로그램이 있습니다. 자격 증명 관리자가 내장된 Windows용 Git 공식 버전도 설치됩니다. GitHub(및 기타 서버)에 대한 2단계 인증 을 허용합니다. 그리고 초기 로그인을 위한 그래픽 인터페이스가 있습니다.
Cygwin 사용자(또는 이미 Windows용 공식 Git을 사용하는 사용자)의 경우 수동 설치를 선호할 수 있습니다. 릴리스 페이지 에서 zip 패키지를 다운로드합니다. 패키지의 압축을 install.cmd
다음 install.cmd 파일을 실행합니다. ~/bin
폴더에 설치됩니다. ~/bin
디렉토리가 PATH에 있는지 확인하십시오.) 그런 다음 다음 명령을 사용하여 구성하십시오.
git config --global credential.helper manager
그런 다음 Git은 모든 서버에 인증할 때 git-credential-manager.exe
Mark가 말했듯이 암호를 일반 텍스트로 저장하지 않으려면 푸시하는 것과 다른 가져오기에 다른 GitHub URL을 사용할 수 있습니다. 구성 파일의 [remote "origin"]
:
url = git://github.com/you/projectName.git pushurl = git@github.com:you/projectName.git
최소한 오픈 소스 프로젝트의 경우 푸시할 때 비밀번호를 묻지만 가져올 때 비밀번호를 묻지 않습니다.
자신의 개인 API 토큰 ( OAuth )을 만들고 일반 자격 증명을 사용하는 것과 같은 방식으로 사용할 수 있습니다( /settings/tokens
). 예를 들어:
git remote add fork https://4UTHT0KEN@github.com/foo/bar git push fork
.netrc
~/.netrc
(Windows의 경우 _netrc
에서 사용자/비밀번호를 구성하는 것입니다. 예:
machine github.com login USERNAME password PASSWORD
HTTPS의 경우 다음 행을 추가합니다.
protocol https
HTTPS를 사용할 때 Git에서 GitHub 암호 를 캐시하려면 자격 증명 도우미 를 사용하여 Git이 GitHub와 대화할 때마다 GitHub 사용자 이름과 암호를 기억하도록 지시할 수 있습니다.
git config --global credential.helper osxkeychain
( osxkeychain helper
가 필요함),git config --global credential.helper wincred
git config --global credential.helper cache
관련된:
자격 증명 도우미를 사용할 수 있습니다.
git config --global credential.helper 'cache --timeout=x'
여기서 x
는 초 수입니다.
repo
를 복제한 후 repo/.git/config
편집하고 아래와 같이 일부 구성을 추가할 수 있습니다.
[user] name = you_name password = you_password [credential] helper = store
username
과 password
다시 묻지 않습니다.
이것이 안전한 솔루션이 아니라는 것을 알고 있지만 때로는 다른 것을 설치하지 않고 간단한 솔루션이 필요할 때도 있습니다. 그리고 helper = store 가 작동하지 않았기 때문에 더미 도우미를 만들었습니다.
스크립트를 만들고 여기에서 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 없이 사용)
그리고 - 짜잔 - git은 이 사용자 + 암호를 사용합니다.
계정 비밀번호 대신 인증 토큰을 사용해야 합니다. GitHub 설정/응용 프로그램으로 이동한 다음 개인 액세스 토큰을 만듭니다. 토큰은 암호를 사용하는 것과 같은 방식으로 사용할 수 있습니다.
토큰은 사용자가 프로젝트 작업에 계정 암호를 사용하지 못하도록 하기 위한 것입니다. 새 토큰 생성 또는 이전 토큰 취소와 같은 관리 작업을 수행할 때만 암호를 사용하십시오.
사용자에게 GitHub 계정에 대한 전체 액세스 권한을 부여하는 토큰 또는 암호 대신 프로젝트별 배포 키를 사용하여 단일 프로젝트 저장소에 대한 액세스 권한을 부여할 수 있습니다. 일반 자격 증명으로 다른 Git 계정 또는 프로젝트에 계속 액세스할 수 있는 경우 다음 단계에서 이 다른 키를 사용하도록 Git 프로젝트를 구성할 수 있습니다.
Host
, 배포 키에 대한 IdentityFile
UserKnownHostsFile
및 아마도 User
(필요하지 않다고 생각하지만)를 포함하는 SSH 구성 파일을 작성하십시오.ssh -F /path/to/your/config $*
인 SSH 래퍼 쉘 스크립트를 작성하십시오.GIT_SSH=/path/to/your/wrapper
를 추가합니다. 여기서 git remote
(origin)는 git@github.com:user/project.git
형식을 사용해야 합니다.보안을 위해 자격 증명을 사용하는 것이 더 좋지만 캐시를 사용하여 한동안 유지할 수 있습니다.
git config --global credential.helper cache git config credential.helper 'cache --timeout=3600'
귀하의 자격 증명은 3600초 동안 저장됩니다.
일반적으로 다음과 같은 원격 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(비밀번호를 포함한 사용자 세부 정보 포함)을 원본에 추가했습니다.
참고: 사용자 이름이 이메일 ID인 경우 작동하지 않습니다.
git remote -v origin https://username:password@gitlab.com/username/Repo.git (fetch) origin https://username:password@gitlab.com/username/Repo.git (push)
저처럼 이중 인증 을 사용한다면 상황이 조금 다릅니다. 다른 곳에서 좋은 답변을 찾지 못했기 때문에 나중에 찾을 수 있도록 여기에 하나를 붙입니다.
이중 인증을 사용하는 경우 사용자 이름/비밀번호를 지정해도 작동하지 않습니다. 액세스가 거부됩니다. 그러나 애플리케이션 액세스 토큰을 사용하고 Git의 자격 증명 도우미를 사용하여 이를 캐시할 수 있습니다. 관련 링크는 다음과 같습니다.
어디서 봤는지 기억이 안 나지만 사용자 이름을 묻는 메시지가 표시되면 응용 프로그램 액세스 토큰을 사용합니다. 그런 다음 암호를 공백으로 둡니다. 그것은 내 Mac에서 작동했습니다.
이것은 Windows 10을 사용하고 있습니다.
git config --global credential.helper wincred
gitcredentials(7) 매뉴얼 페이지 에서 답을 얻었습니다. 제 경우에는 Windows 설치에 credential-cache가 없습니다. 자격 증명 저장소를 사용합니다.
credential-store를 사용한 후 사용자 이름/비밀번호는 [사용자 폴더]/.git-credentials 파일에 저장됩니다. 사용자 이름/비밀번호를 제거하려면 파일의 내용을 삭제하면 됩니다.
또한 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
작성기 문서 에는 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의 증가된 로드에 관한 최후의 수단이어야 합니다.
osxkeychain
을 사용 중이고 토큰이 만료되어 업데이트하려면 다음 단계를 따르세요.
터미널에서 실행한 다음 Enter 키를 두 번 누릅니다.
git credential-osxkeychain erase host=github.com protocol=https
이제 사용자 이름/비밀번호를 묻는 메시지가 표시됩니다. 그러나 때때로 이것이 '취하지 않는' 것 같아 계속 재입력해야 합니다.
그렇다면 컴퓨터를 다시 시작하십시오 . 이제 다음에 git 명령을 실행하고 사용자 이름/비밀번호를 입력하면 저장됩니다.
출처 : http:www.stackoverflow.com/questions/5343068/is-there-a-way-to-cache-https-credentials-for-pushing-commits
Android의 ListView에서 이미지를 지연 로드하는 방법 (0) | 2021.12.20 |
---|---|
Linux에서 실행되는 C++ 코드를 프로파일링하려면 어떻게 해야 합니까? (0) | 2021.12.08 |
SQL Server 테이블에 열이 있는지 확인하는 방법은 무엇입니까? (0) | 2021.12.08 |
특정 문자열을 포함하는 모든 행을 텍스트 파일에서 삭제하는 방법은 무엇입니까? (0) | 2021.12.08 |
언제 '$this'보다 'self'를 사용해야 합니까? (0) | 2021.12.08 |