Git 리포지토리를 GitHub 계정에서 PC로 복제했습니다.
내 PC와 랩톱 모두에서 하나의 GitHub 계정으로 작업하고 싶습니다.
내 PC를 사용하여 GitHub를 밀거나 당기려고 할 때 사용자 이름과 비밀번호가 필요하지만 랩톱을 사용할 때는 아닙니다.
와 상호 작용할 때마다 사용자 이름과 비밀번호를 입력하고 싶지 않습니다 origin
. 내가 여기서 무엇을 놓치고 있습니까?
Git 리포지토리를 GitHub 계정에서 PC로 복제했습니다.
내 PC와 랩톱 모두에서 하나의 GitHub 계정으로 작업하고 싶습니다.
내 PC를 사용하여 GitHub를 밀거나 당기려고 할 때 사용자 이름과 비밀번호가 필요하지만 랩톱을 사용할 때는 아닙니다.
와 상호 작용할 때마다 사용자 이름과 비밀번호를 입력하고 싶지 않습니다 origin
. 내가 여기서 무엇을 놓치고 있습니까?
답변:
일반적인 원인은 SSH 대신 기본 (HTTPS)을 사용하여 복제하는 것입니다. 리포지토리로 이동하여 "복제 또는 다운로드"를 클릭 한 다음 URL 필드 위의 "SSH 사용"버튼을 클릭하고 다음과 같이 오리진 원격 URL을 업데이트하면이 문제를 해결할 수 있습니다.
git remote set-url origin git@github.com:username/repo.git
이것은 GitHub : 원격 URL을 HTTPS에서 SSH로 전환에 설명되어 있습니다 .
git remote set-url origin git://new.url.here
)
git remote set-url origin https://name:password@github.com/repo.git
(여기에 코멘트에서 추출)
신임 캐싱 을 사용하려면 다음 명령을 실행하십시오 .
$ git config credential.helper store
$ git push https://github.com/owner/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>
캐싱 expire를 지정해야합니다 .
git config --global credential.helper 'cache --timeout 7200'
자격 증명 캐싱을 활성화하면 7200 초 (2 시간) 동안 캐시됩니다 .
git remote set-url origin https://git@github.com/<owner>/<repo>.git
도 2FA와 함께 작동이
fatal: protocol 'https' is not supported
방금 동일한 문제가 발생했으며 가장 간단한 해결책은 HTTPS URL 대신 SSH URL을 사용하는 것입니다.
ssh://git@github.com/username/repo.git
그리고 이것은 아닙니다.
https://github.com/username/repo.git
당신은 지금과 유효성을 검사 할 수 있습니다 단지 SSH를 대신의 키 username
와 password
.
비밀번호를 일반 텍스트로 입력하지 않아도 SSH로 변경하는 것 외에도 HTTPS를 계속 사용할 수 있습니다. 이것을 넣으면 ~/.netrc
사용자 이름 / 비밀번호를 요구하지 않습니다 (적어도 Linux 및 Mac에서는).
machine github.com
login <user>
password <password>
추가 (VonC의 두 번째 주석 참조) : Windows에서 파일 이름은 %HOME%\_netrc
입니다.
또한 암호화하려는 경우 VonC의 첫 번째 주석을 읽으십시오.
Git 1.7.10 이상이 있는 경우 사용할 수있는 또 다른 추가 (user137717의 의견 참조) .
자격 증명 도우미를 사용하여 Git에서 GitHub 비밀번호를 캐시하십시오 .
HTTPS를 사용하여 GitHub 리포지토리를 복제하는 경우 자격 증명 도우미를 사용하여 GitHub와 대화 할 때마다 GitHub 사용자 이름과 비밀번호를 기억하도록 Git에 지시 할 수 있습니다.
이것은 Linux, Mac 및 Windows에서도 작동합니다.
%HOME%\_netrc
대신을 호출하는 경우 Windows의 DOS 세션 또는 git bash에서 완벽하게 작동합니다 ~/.netrc
. 해당 파일을 암호화하려면 stackoverflow.com/a/18362082/6309 를 참조하십시오 .
이전 답변으로 혼란스러워하는 미숙 한 사람에게는 다음을 수행 할 수 있습니다.
git remote -v
다음과 같은 것으로 응답합니다.
origin https://yourname@github.com/yourname/yourrepo.git (fetch)
origin https://yourname@github.com/yourname/yourrepo.git (push)
그런 다음 다른 많은 사람들이 제안한 명령을 실행할 수 있지만 이제는 위에서 yourname과 yourrepo를 알고 있으므로 yourname/yourrepo.git
위의 내용을 잘라내어 붙여 넣을 수 있습니다 .
git remote set-url origin git@github.com:yourname/yourrepo.git
paraphrase
매번 나에게 묻습니다 . 나는 하나를 설정하지 않았다
yourrepo
?
git remote -v
하고 무엇이 나오는지 확인하십시오
당신은 SSH를 사용하여 개인 키가 암호로 암호화되면, 당신은 아직도 당신이 망할 놈으로 네트워크 작업을 수행 할 때 개인 키의 암호 / 암호를 입력하라는 메시지가 표시됩니다 처럼 push
, pull
그리고 fetch
.
당신이 당신의 암호 매번 입력 할 필요가 없도록하려는 경우, 당신은 사용할 수 있습니다 ssh-agent
내가 설명해으로, 터미널 세션 당 한 번만 개인 키 암호 자격 증명을 저장하는 데 에 내 대답은 당신의 인증 에이전트에 대한 연결을 열 수 없습니다 :
$ eval `ssh-agent -s`
$ ssh-add
Windows msysgit Bash에서는의 출력을 평가해야 ssh-agent
하지만 다른 개발 환경 및 운영 체제에서 동일한 작업을 수행해야하는지 잘 모르겠습니다.
ssh-add
홈 .ssh
폴더 id_rsa
에서 기본 이름 인 개인 키를 찾지 만 다른 이름의 키에 파일 경로를 전달할 수 있습니다.
터미널 세션을 마쳤 ssh-agent
으면 kill 플래그를 사용하여 종료 할 수 있습니다 -k
.
$ ssh-agent -k
ssh-agent
매뉴얼에 설명 된대로 :
-k
SSH_AGENT_PID 환경 변수에서 제공 한 현재 에이전트를 종료하십시오.
또한 다음과 같은 선택적 시간 초과 매개 변수가 필요할 수 있습니다.
$ ssh-add -t <timeout>
여기서 <timeout>
형식입니다 <n>h
위한 <n>
시간 <n>m
에 대한 <n>
분, 등등.
ssh-agent
매뉴얼 에 따르면 :
-t life
에이전트에 추가 된 ID의 최대 수명에 대한 기본값을 설정하십시오. 수명은 초 또는 sshd_config (5)에 지정된 시간 형식으로 지정할 수 있습니다 . ssh-add (1) 로 ID에 지정된 수명 이이 값을 재정의합니다. 이 옵션이 없으면 기본 최대 수명은 영원합니다.
더 많은 시간 형식에 대해서는이 페이지를 참조하십시오 .
Cygwin 사용자는 Cygwin 에서 ssh-agent를 사용할 때 발생할 수있는 보안 위험에 대해 알고 있어야합니다 .
로컬 netstat 및 원격 포트에서 / tmp / ssh-foo에 지정된 포트가 누구에게도 액세스 가능한 것으로 보이지는 않지만 사람들은 Cygwin 1 에서 ssh-agent의 잠재적 위험을 인식해야합니다 .
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
그리고 인용 된 링크에서 :
그러나, Cygwin에서의 유닉스 도메인 소켓은 참고 근본적으로 불안전 하고, 그래서를 난 강력하게 억제 의 Cygwin에서 SSH 에이전트의 사용을.
Cygwin에서 ssh-agent를 실행하면
/tmp/ssh-$USERNAME/
디렉토리에 AF_UNIX 소켓이 생성 됩니다. Cygwin에서 AF_UNIX 소켓은 AF_INET 소켓을 통해 에뮬레이트됩니다./tmp/ssh-$USERNAME/agent-socket-*
메모장을 통해 파일을 살펴보면 쉽게 알 수 있습니다 . 당신은 같은 것을 볼 수 있습니다!<socket >2080
다음 실행
netstat -a
하고 놀라게! 포트 2080을 수신하는 프로그램이 있습니다. ssh-agent입니다. ssh가 서버로부터 RSA 챌린지를 수신하면 해당 서버/tmp/ssh-$USERNAME/agent-socket-*
(Cygwin에서는으로 연결됨)를localhost:2080
참조하고 ssh-agent에게 개인 키를 사용하여 RSA 챌린지를 처리하도록 요청한 다음 단순히 ssh-agent에서받은 응답을 서버로 전달합니다.Unix에서는 프로그램이 AF_UNIX 소켓에 액세스하려고 할 때 Unix 커널이 권한을 확인하기 때문에 이러한 시나리오는 문제없이 작동합니다. 그러나 AF_INET 소켓의 경우 연결이 익명입니다 ( "안전하지 않은"읽기). Cygwin ssh-agent가 실행 중이라고 가정하십시오. 악의적 인 해커가 상자를 포트하고, ssh-agent에서 사용하는 열린 포트를 찾고, SSH 서버에 대한 연결을 열고, RSA 챌린지를 받고, 찾은 열린 포트를 통해 ssh-agent로 전송하고, RSA 응답, SSH 서버 및 Voila로 전송하고 서버에 성공적으로 로그인했습니다.
출처 : Git 설정
다음 명령은 암호를 메모리에 얼마 동안 저장합니다 ( Git 1.7.10 이상).
$ git config --global credential.helper cache
# Set git to use the credential memory cache
$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after one hour (setting is in seconds)
Git pull & push에 https 를 사용하는 경우 푸시 remote.origin.url
할 때마다 입력 사용자 이름 (또는 비밀번호)을 피하기 위해 프로젝트를 구성 하십시오.
구성 방법 remote.origin.url
:
URL 형식 : https : // {username : password @} github.com/ {owner} / {repo} URL의 매개 변수 : * username
옵션, 필요할 때 사용할 사용자 이름.
입증, 지정된 경우 인증이 필요할 때 사용자 이름을 다시 입력 할 필요가 없습니다. 이메일을 사용하지 마십시오. "@"가없는 사용자 이름을 사용하십시오. 그렇지 않으면 URL을 올바르게 구문 분석 할 수 없습니다. * 비밀번호 선택적으로 인증이 필요할 때 사용할 비밀번호입니다. 지정된 경우 인증이 필요할 때 비밀번호를 다시 입력 할 필요가 없습니다. 팁: 이 값은 일반 텍스트로 저장되므로 보안상의 이유로이 매개 변수를 지정하지 마십시오. * 예 : 자식 구성 remote.origin.url https : //eric@github.com/eric/myproject
ssh
설정 단계가 조금 더 복잡하더라도 ssh
프로토콜 사용 이보다 나은 솔루션 이라고 생각 합니다 https
.
거친 단계 :
ssh-keygen
를 들어 Linux에서 Windows msysgit
와 같은 명령을 사용하여 ssh 키를 작성하면 유사한 명령이 제공됩니다.~/.ssh
. 그리고 ssh-add
명령을 통해 ssh 에이전트에 추가하십시오 .remote.origin.url
Git 저장소를 ssh
스타일로 변경git@gitlab.com:myaccount/myrepo.git
팁 :
https
및 ssh
프로토콜입니다.단순히 변경하는 것만 remote.origin.url
으로 충분하거나 repo_home/.git/config
직접 편집 하여 값을 변경할 수 있습니다 (예 : vi
Linux에서 사용).
일반적으로 각 프로토콜에 대한 줄을 추가하고을 사용하여 그중 하나를 주석 처리하십시오 #
.
예 :
[원격 "원산지" url = git@gitlab.com : myaccount / myrepo.git # url = https : //myaccount@gitlab.com/myaccount/myrepo.git 가져 오기 = + refs / heads / * : refs / remotes / origin / *
git-fetch(1)
에서는 git
/ ssh
기반 URL에 대해서만 언급 합니다.
https://username:password@github.com/
해도 안전합니다. 참조 stackoverflow.com/questions/4980912/...
다른 옵션이 있습니다.
쓰는 대신
git push origin HEAD
당신은 쓸 수 있습니다 :
git push https://user:pass@yourrepo.com/path HEAD
분명히 대부분의 쉘에서는 암호가 히스토리에 캐시되므로 암호를 명심하십시오.
SSH 키 또는 .netrc
파일이 작동하지 않으면 간단하지만 덜 안전한 또 다른 솔루션은 git-credential- store-자격 증명을 디스크에 저장하는 도우미입니다.
git config --global credential.helper store
기본적으로 신임 정보는 file에 저장됩니다 ~/.git-credentials
. 작성되어 작성됩니다.
이 도우미를 사용하면 암호가 디스크에 암호화되지 않고 파일 시스템 권한으로 만 보호됩니다. 이것이 허용 가능한 보안 상충 관계가 아닐 수 있습니다.
나는 같은 문제가 있었다.
.git/config
프로젝트 에서 파일을 변경했습니다 .
url = https://github.com/<your-user-here>/<your-repo-here>
에
url = git@github.com:<your-user-here>/<your-repo-here>
설정중인 Git 프로파일에 SSH 공개 키를 추가했습니다.
SSH 공개 키의 경우 :
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_rsa.pub
rsa 키 를 가져 와서 git 웹 포털 설정에 붙여 넣습니다.
HTTPS 업데이트 :
GitHub는 HTTPS를 사용할 때 자격 증명을 저장하는 새로운 Windows 용 프로그램을 시작했습니다.
쓰다:
프로그램을 실행하면 .gitconfig
파일 이 편집 됩니다. .gitconfig
여러 개가있는 경우 올바르게 편집했는지 다시 확인하십시오 . 올바른 것을 수정하지 않은 경우 다음을 추가하십시오..gitconfig
[credential]
helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'
이후 줄 바꿈에 유의하십시오 [credential]
. 필수입니다.
명령 행 클라이언트를 열고 git push origin master
한 번 시도하십시오 . 암호를 묻는 메시지가 나타나면 암호를 입력하십시오. 비밀번호가 저장되었습니다!
Windows Git 사용자의 경우을 (를) 실행 한 후에도 git config --global credential.helper store
여전히 비밀번호를 묻는 메시지가 표시되면이 명령을 사용하여 구성 파일이 작성된 위치를 확인하는 것이 좋습니다.
git config --list --show-origin
필자의 경우 구성 파일 'C : \ Program Files \ Git \ mingw64 \ etc \ gitconfig'를 수동으로 편집하고 다음 텍스트를 추가 한 후에 작동했습니다.
[credential]
helper = store
기본적으로 두 가지 옵션이 있습니다.
두 컴퓨터에서 같은 사용자를 사용하는 경우 .pub 키를 PC에 복사해야하므로 GitHub는 사용자가 같은 사용자임을 알고 있습니다.
PC 용으로 새 .pub 파일을 생성하고 머신을 다른 사용자로 취급하려면 GitHub 웹 사이트에서 새 .pub 파일을 등록해야합니다.
그래도 작동하지 않으면 ssh가 올바르게 구성되지 않았고 ssh가 키 위치를 찾지 못했기 때문일 수 있습니다. 시험
ssh -vv username@github.com
SSH 실패 이유에 대한 자세한 정보를 얻으려면.
Git 구성 파일을 직접 업데이트합니다 ( 멋진 명령을 기억하지 않으려는 경우 ).
.git/config
자주 사용하는 텍스트 편집기에서 파일을 엽니 다 . 복제 한 폴더 또는 수행 git init
한 저장소에 있습니다. 해당 저장소로 이동하십시오. .git
은 숨겨진 폴더이며 Ctrl+ H를 누르면 숨겨진 폴더 가 표시 ls -a
됩니다 (터미널).
아래는 .git/config
파일 샘플입니다 . 이 줄을 복사하여 붙여 넣고 Git 정보로 해당 줄을 업데이트하십시오.
[user]
name = Tux
email = tux@gmail.com
username = happy_feet
[remote "origin"]
url = https://github.com/happy_feet/my_code.git
fetch = +refs/heads/*:refs/remotes/origin/*
SSH에 대해 다음 형식으로 URL 부분을 변경하십시오.
url = git@github.com:happy_feet/my_code.git
( 위의 형식은 GitHub 또는 Bitbucket과 같은 다양한 Git 원격 서버에서는 변경되지 않습니다. 버전 제어에 Git을 사용하는 경우에도 동일합니다 .)
참고 : SSH를 원격 Git 리포지토리에 연결하려면 공용 SSH 키를 Git 원격 서버에 추가해야합니다 ( GitHub 또는 Bitbucket 등. 설정 페이지에서 SSH 키 검색 ).
SSH 키를 생성하는 방법은 SSH 키 작성을 참조하십시오.
이것이 나를 위해 일한 것입니다.
git remote set-url origin https://username@github.com/username/reponame.git
예:
git remote set-url origin https://jsmith@github.com/jsmith/master.git
SSH 대신 HTTPS를 복제하고 풀시 사용자 이름 및 비밀번호 프롬프트와 관련된 문제가 발생하면 푸시하고 가져 오십시오. 이 문제는 UBUNTU에 대해서만 간단하게 해결할 수 있습니다
1 단계 : 루트 디렉토리로 이동
cd ~/
.git-credentials 파일을 만듭니다.
이 컨텐츠를 귀하 usename
password
와 함께 해당 파일에 추가하십시오.githosting URL
https://user:pass@example.com
그런 다음 명령을 실행하십시오.
git config --global credential.helper store
이제 번거 로움없이 리포지토리에서 모든 세부 정보를 가져 와서 가져올 수 있습니다.
Windows에서 Git (예 : Git Bash)을 사용중인 경우 (HTTPS에서 SSH로 전환하지 않으려는 경우) Windows 용 Git Credential Manager를 사용할 수도 있습니다.
이 응용 프로그램은 당신을 위해 사용자 이름과 암호를 유지합니다 ...
많은 사용자가 말했듯이 Git 리포지토리 URL을 HTTPS에서 SSH로 변경하기 만하면됩니다.
컴퓨터에서 SSH 키를 생성하지 않은 경우 SSH 키를 생성해야합니다.
추가 정보와 마찬가지로이 변경을 수행 한 후에도 여전히 동일한 오류가 발생했습니다.
권한이 거부되었습니다.
필자의 경우 문제는 Windows Shell을 사용하여 ngh 명령을 실행했다는 것입니다. 이 명령은 SSH 구문을 요청하는 프롬프트를 열어야하고 Windows Shell이 이러한 종류의 프롬프트를 열지 않기 때문에 인증이 실패했습니다.
그래서, 그냥 Git 쉘을 열고 ngh 명령을 실행해야했습니다. SSH를 요청할 때마다 프롬프트에 SSH 문구를 넣고 "voilà"... 제대로 작동했습니다!
# create the company identity file
ssh-keygen -t rsa -b 4096 -C "first.last@corp.com"
# save private key to ~/.ssh/id_rsa.corp,
cat ~/.ssh/id_rsa.corp.pub # copy paste this string into your corp web ui security ssh keys
# create your private identify file
ssh-keygen -t rsa -b 4096 -C "me@gmail.com"
# save private key to ~/.ssh/id_rsa.me, note the public key ~/.ssh/id_rsa.me.pub
cat ~/.ssh/id_rsa.me.pub # copy paste this one into your githubs, private keys
# clone company internal repo as follows
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
git clone git@git.in.corp.com:corp/project.git
export git_msg="my commit msg with my corporate identity"
git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@corp.com>"
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
git push
# clone public repo as follows
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.corp -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
git clone git@github.com:acoolprojectowner/coolproject.git
export git_msg="my commit msg with my personal identity"
git add --all ; git commit -m "$git_msg" --author "MeFirst MeLast <first.last@gmail.com>"
GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.me -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
git push
# stop :: how-to use different ssh identity files