같은 컴퓨터에 여러 개의 github 계정이 있습니까?


418

내 컴퓨터에서 내 실제 "작업"저장소와 자식 허브의 개인 저장소 모두에서 작업하려고합니다.

업무용 계정이 먼저 설정되었으며 모든 것이 완벽하게 작동합니다.

그러나 내 개인 계정은 다른 계정 / 이메일로 설정된 개인 저장소로 푸시 할 수 없습니다.

작업 키를 개인 계정으로 복사하려고 시도했지만 오류가 발생합니다. 물론 하나의 계정에만 키를 연결할 수 있기 때문입니다.

각각의 github 자격 증명을 사용하여 두 계정으로 밀거나 당기는 방법은 무엇입니까?


3
링크 http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts에 나와있는 단계 는 저에게 효과적이며 한 가지만 추가하면됩니다. <br> & nbsp; ssh-add ~/.ssh/id_rsa_COMPANY ssh-agent에 사용하도록 포함 시키려면 <br/>. <hr /> 위에서 언급 한 자습서를 통해 나머지는 잘 작동합니다.
— Brut3e

2
"물론 키는 하나의 계정에만 연결될 수 있기 때문에"물론입니까? 왜?
— Sparr

Git 2.13 이상은 .gitconfig의 조건부 포함을 지원하여 폴더 계층 당 ID를 관리하는 유용한 방법입니다. stackoverflow.com/a/36296990/901597
— Joe Bowbeer

답변:


275

여러 SSH 키 쌍으로 SSH 설정을 구성하기 만하면됩니다.

또한 다른 페르소나를 사용하여 여러 리포지토리를 사용하는 경우 개별 리포지토리에 따라 사용자 설정이 재정의되었는지 확인해야합니다.

사용자 이름, 이메일 및 GitHub 토큰 설정 – 개별 리포지토리에 대한 설정 무시 https://help.github.com/articles/setting-your-commit-email-address-in-git/

도움이 되었기를 바랍니다.

참고 : 일부 사용자는 다른 저장소에 다른 이메일을 사용해야 할 수도 있습니다 .git 2.13 부터 다음 ~/.gitconfig과 같은 전역 구성 파일을 편집하여 디렉토리를 기준으로 이메일을 설정할 수 있습니다 .

[user]
    name = Pavan Kataria
    email = defaultemail@gmail.com

[includeIf "gitdir:~/work/"]
    path = ~/work/.gitconfig

그런 다음 작업 별 구성 ~ / work / .gitconfig는 다음과 같습니다.

[user]
    email = pavan.kataria@company.tld

의견에이 사실을 알려 주신 @alexg에게 감사드립니다.


4
세 번째 링크가 끊겼습니다 (여러 SSH 키)
— RustyTheBoyRobot

12
첫 번째 링크는 이제 사용자 계정과 조직 계정의 페이지로 리디렉션됩니다 (원래 의도 한 것인지 확실하지 않음). 이 튜토리얼 은 따르기 쉽고 내 문제를 해결했습니다.
— Eric H.

1
@Camilo 새로운 업데이트 된 링크가 무엇인지 모르기 때문에 업데이트 된 링크를 알고 있다면 연결하는 것이 좋을 것입니다. :)
— Pavan

4
@AlmasAdilbek 그것은 거의 3 년이 지났으며, 링크는 끊어지고 끊어 질 수밖에 없습니다. 대체 기사를 찾거나 원본 소스를 다시 찾아서 친구의 링크를 유용하게 업데이트 할 수 있습니까? 끊어진 링크를 영원히 고칠 수는 없습니다.
— Pavan

3
실제 게시물의 중요한 단계를 요약하지 않으면 답이 아닙니다. 이 답변은 이미 한 번 링크 부패로 어려움을 겪었지만 필요한 업데이트 토브가 질문에 대한 실제 답변을 제공하지는 않았습니다.
— 감사합니다

139

HTTPS 사용 :

원격 URL을 https로 변경하십시오.

git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

그리고 당신은 갈 수 있습니다 :

git push

커밋이 USERNAME에 의해 수행 된 것처럼 보이도록하기 위해 user.name을 설정할 수 있습니다. 도록 하기 위해이 프로젝트에 대해 및 user.email도 있습니다.

git config user.name USERNAME
git config user.email USERNAME@example.com

8
다른 개인 저장소에서 빠른 다운로드를위한 가장 간단한 솔루션입니다.
— Jaap Geurts

1
이것이 스택에서 찾은 최고의 솔루션입니다
— Harvinder Singh

이 솔루션은 더 많은 ssh 키를 추가하지 않으려는 가장 간단한 방법을 제공합니다. 이미 설정 한 경우 그냥 참고 user.name및 user.email과 --global플래그, 단지 그가 단지 하나 개의 repo에 대한 로컬로 설정 위의 말씀 않습니다. 그것은 많은 문제를 해결했습니다. 이제 이전
— 리포지토리

72

모양 만들기

별도의 github / bitbucket / what 계정으로 git repo를 관리하려면 새 SSH 키를 생성하기 만하면됩니다.

우리가 두 번째 정체성의 repos를 당기는 / 밀어 시작하기 전에, 우리는 모양으로 당신을 얻을 해 -하자가 시스템이 일반에 설치 가정 id_rsa및 id_rsa.pub키 쌍. 지금 당신의 tree ~/.ssh모습은 이렇습니다

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub

먼저 해당 키 페어의 이름을 지정하십시오. 설명적인 이름을 추가하면 어떤 키가 어떤 사용자 / 원격에 사용되었는지 기억하는 데 도움이됩니다.

# change to your ~/.ssh directory
$ cd ~/.ssh

# rename the private key
$ mv id_rsa github-mainuser

# rename the public key
$ mv id_rsa.pub github-mainuser.pub

다음 으로 새 키 페어를 생성 하겠습니다. 여기서 새 키의 이름을 지정하겠습니다.github-otheruser

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser

우리가 볼 때 지금, tree ~/.ssh우리는 참조

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub

다음으로 ~/.ssh/config주요 구성을 정의 할 파일 을 설정해야 합니다. 우리는 그것을 만들 것이다 적절한 소유자 읽기 / 쓰기 전용 권한

$ (umask 077; touch ~/.ssh/config)

좋아하는 편집기로 열어 다음 내용을 추가하십시오.

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

아마도 기본 github ID와 관련된 기존 repos가있을 것입니다. 따라서 "default"github.com Host은 mainuser키 를 사용하도록 설정되어 있습니다 . 한 계정을 다른 계정보다 선호하지 않으려면 업데이트 된 ssh 구성을 사용하도록 시스템의 기존 저장소 를 업데이트 하는 방법을 보여 드리겠습니다 .


github에 새로운 SSH 키 추가

로 향할 github.com/settings/keys 새로운 추가 공개 키를

공개 키 내용은 다음을 사용하여 얻을 수 있습니다 : github에 복사 / 붙여 넣기

$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...

이제 새로운 사용자 ID가 모두 설정되었습니다. 아래에서이를 사용하는 방법을 보여 드리겠습니다.


작업 완료 : 리포지토리 복제

그렇다면 이것이 어떻게 git 및 github과 함께 작동합니까? 계란이 없으면 닭고기를 먹을 수 없기 때문에 기존 레포 복제를 살펴 보겠습니다. 이 상황은 직장에 대한 새로운 github 계정이 있고 회사 프로젝트에 추가 된 경우에 적용됩니다.

github.com/someorg/somerepo이미 존재하고 당신이 그것에 추가 되었다고 가정 해 봅시다 – 복제는 쉽습니다

$ git clone github.com-otheruser:someorg/somerepo.git

그 굵은 부분이 있어야합니다 경기 Host당신의 이름을 우리는 설정 ~/.ssh/config파일을. git을 해당하는 IdentityFile것과 올바르게 연결 하고 github으로 올바르게 인증합니다.


작업 완료 : 새 저장소 만들기

계란이 없으면 닭고기를 먹을 수 없기 때문에 보조 계정에 새 저장소를 게시하는 방법을 살펴 보겠습니다. 이 상황 은 보조 github 계정을 사용하여 새 콘텐츠를 만드는 사용자에게 적용됩니다 .

이미 로컬에서 약간의 작업을 완료했으며 이제 github으로 넘어갈 준비가되었다고 가정 해 봅시다. 원한다면 나와 함께 할 수있어

$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init

이제이 리포지토리를 구성하여 신원 을 사용하십시오.

$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"

이제 첫 커밋

$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"

커밋을 확인하여 git log를 사용하여 새 ID를 사용 했는지 확인하십시오.

$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>

좋아, github에 푸시 할 시간이다! github은 아직 새로운 저장소에 대해 알지 못하므로 먼저 github.com/new 로 이동 하여 새 저장소를 작성하십시오. 이름은 somerepo

이제 올바른 ID / 자격 증명을 사용하여 저장소가 github과 "통화"하도록 구성하기 위해 원격을 추가했습니다. 새 계정에 대한 github 사용자 이름을 가정하면 someuser...

$ git remote add origin github.com-otheruser:someuser/somerepo.git

그 굵은 부분은 절대적으로 중요하며이 있어야 일치 Host우리는 당신에 정의 된 ~/.ssh/config파일

마지막으로 레포를 밀어

$ git push origin master

새로운 SSH 구성을 사용하도록 기존 저장소를 업데이트하십시오.

이미 일부 리포지토리가 복제되었지만 새 SSH 구성을 사용하려고한다고 가정합니다. 위의 예 에서 SSH 구성 파일에 이전 id_rsa/ id_rsa.pub키 쌍을 할당하여 기존 저장소를 그대로 유지했습니다 Host github.com. 이것에는 아무런 문제가 없지만 지금은 적어도 5 개의 github 구성이 있으며 그 중 하나를 "기본"구성으로 생각하는 것을 좋아하지 않습니다. 각 구성에 대해 명시 적입니다.

우리가 이것을하기 전에

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

이제 우리는 이것을 이것으로 업데이트 할 것입니다 ( 굵게 변경 )

Host github.com-mainuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

그러나 이는 이제 github.com원격의 기존 저장소 가이 ID 파일에서 더 이상 작동하지 않음 을 의미 합니다. 그러나 걱정하지 마십시오. 간단한 수정입니다.

기존 SSH를 업데이트하여 새 SSH 구성을 사용하려면 간단히 repo의 git config 파일을 열고 URL을 업데이트하십시오!

$ cd existingrepo
$ nano .git/config

원격 출발지 필드 업데이트 ( 굵게 표시 )

[remote "origin"]
        url = github.com-mainuser:someuser/existingrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

그게 다야. 지금 당신은 당신의 마음의 내용에 push/ 할 수 있습니다pull


SSH 키 파일 권한

공개 키가 올바르게 작동하지 않아 문제가 발생하는 경우 SSH는 디렉토리 및 해당 키 파일 에서 허용 되는 파일 권한 에 대해 매우 엄격 ~/.ssh합니다.

일반적으로 모든 디렉토리 700와 파일이 있어야합니다. 600즉, 소유자 / 읽기 전용이므로 다른 그룹 / 사용자는이를 읽거나 쓸 수 없습니다.

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub

SSH 키를 관리하는 방법

연결하는 모든 호스트에 대해 별도의 SSH 키를 관리하므로 하나의 키가 손상된 경우 해당 키를 사용한 다른 모든 장소에서 키를 업데이트 할 필요가 없습니다. 이는 사용자 정보 중 1 억 5 천만 명의 사용자 정보가 도용되었다는 통지를 Adobe로부터 받았을 때와 같습니다. 이제 신용 카드를 취소하고이 신용 카드에 의존하는 모든 서비스를 업데이트해야합니다.

내 ~/.ssh디렉토리는 다음과 같습니다 .pem. 연결하는 각 도메인의 폴더에 각 사용자마다 하나의 키가 있습니다. .pem키를 사용 하므로 키당 하나의 파일 만 필요 합니다.

$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│   ├── naomik.pem
│   ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│   ├── naomi.pem
├── somedomain.com
│   ├── someuser.pem
└── someotherdomain.org
    └── someuser.pem

그리고 여기 해당 /.ssh/config파일이 있습니다. 분명히 github은 github에 대한이 질문에 대답하는 것과 관련이 있지만이 답변은 여러 서비스 / 기계에서 ssh ID를 관리하는 지식을 갖추는 것을 목표로합니다.

Host github.com-naomik
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/naomik.pem

Host github.com-someuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/someusername.pem

Host naomi.makes.software
  User naomi
  IdentityFile ~/.ssh/naomi.makes.software/naomi.pem

Host somedomain.com
  HostName 162.10.20.30
  User someuser
  IdentityFile ~/.ssh/somedomain.com/someuser.pem

Host someotherdomain.org
  User someuser
  IdentityFile ~/.ssh/someotherdomain.org/someuser.pem

PEM 키에서 SSH 공개 키 얻기

위의 각 키에 대해 하나의 파일 만 있음을 알았습니다 . 공개 키를 제공해야 할 때 필요에 따라 간단히 공개 키를 생성 합니다.

따라서 github에서 ssh 공개 키를 요청하면이 명령을 실행하여 공개 키를 stdout에 출력하십시오. 필요한 경우 복사 / 붙여 넣기

$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...

이것은 원격 컴퓨터에 키를 추가 할 때와 동일한 프로세스입니다. ssh-rsa AAAA...값은 원격의 복사됩니다 ~/.ssh/authorized_keys파일


id_rsa/ id_rsa.pub키 쌍을 PEM 형식으로 변환

따라서 주요 파일을 길들이고 일부 파일 시스템 쪼개기를 줄이고 싶습니까? 키 페어를 단일 PEM으로 쉽게 변환

$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem

또는, 위의 예와 함께 다음, 우리는 이름을 변경 id_rsa -> github-mainuser하고 id_rsa.pub -> github-mainuser.pub- 그래서

$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem

이제 우리가 이것을 올바르게 변환했는지 확인하기 위해 생성 된 공개 키가 이전 공개 키와 일치 하는지 확인하고 싶을 것입니다

# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

이제 당신이 가지고 github-mainuser.pem파일을 안전하게 이전 삭제할 수 있습니다 github-mainuser및 github-mainuser.pub파일을 - 오직 PEM 파일이 필요합니다; 필요할 때마다 공개 키를 생성하십시오 ^ _ ^


처음부터 PEM 키 만들기

개인 / 공개 키 쌍을 만든 다음 단일 PEM 키로 변환 할 필요가 없습니다 . PEM 키를 직접 만들 수 있습니다.

를 만들어 보자 newuser.pem

$ openssl genrsa -out ~/.ssh/newuser.pem 4096

SSH 공개 키를 얻는 것은 동일합니다

$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==

2
나는 이것이 오래된 질문이라는 것을 이해하지만 여기의 거의 모든 대답이 튜토리얼에 대한 링크에 달려 있으며 따라서 링크가 썩을 수 있다는 사실을 변명하지는 않습니다. 소스 / 인용을 연결하는 것은 좋지만 여기에 게시 된 답변의 중요 비트를 요약하지 않으면 링크에 의존 할 수 없습니다.
— 감사합니다

나는 당신의 훌륭하고 자세한 답변을 분명히하는 올바른 방법으로 찬성했습니다. 내 문제는 복잡하고 몇 년 동안 일부 계정을 사용한 후 새 계정을 얻은 다음 "올바른 방법"을 수행하는 방법을 기억할 수 없다는 것입니다. 아래의 방법은 매우 간단합니다. 3 개의 새 파일과 1 개의 새 스크립트를 만들면 좋습니다. 몇 년 동안 완벽하게 작동했습니다. 독자는 자신에게 가장 적합한 것을 결정할 수 있습니다.
— David H

DavidH 나는 그 발언에 감사한다. 전체적으로 받아들이면 답이 복잡해 보이지만 독자가 다른 목표 중 하나 인 다른 github 정체성을 추가하는 것이라면 독자가 답의 작은 부분에만 관심을 기울여야합니다. 대답은 일반적으로 SSH 키를 관리하기위한 강력한 솔루션으로 설정하는 것을 목표로하며 완전히 선택적입니다.
— 감사합니다

나는을 추가 git clone github.com-otheruser:someorg/somerepo.git해야 한다고 생각 합니다 . 적어도 내가 필요한 것입니다. git clone git@github.com-otheruser:someorg/somerepo.gitgit@
— CommonsWare

@CommonsWare 사용자 지정과 같은 모든 명령 행 옵션은 SSH 구성에서도 수행 할 수 있습니다. 예를 들면 다음과 같습니다. Host github.com(newline) User git(newline)IdentityFile ...
— 감사합니다.

24

~ / .ssh / config에서 github.com에 다른 호스트 별명을 작성하고 각 호스트 별명에 고유 한 ssh 키를 제공하면 혼란없이 여러 github 계정을 쉽게 사용할 수 있습니다. github.com은 항상 git 인 사용자가 아니라 연결하는 데 사용한 ssh 키를 구별하기 때문입니다. 자체 호스트 별칭을 사용하여 원격 원점을 구성하면됩니다.”

위의 요약은 아래 블로그 게시물에 대한 의견에 의한 것입니다.

이 설명이 가장 명확하다는 것을 알았습니다. 그리고 그것은 적어도 2012 년 4 월 현재 저에게 효과적입니다.

http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/


1
당신은 아마도 실행해야합니다 $ ssh-add ~/.ssh/id_rsa_COMPANY- 참조 오류 : 사용 권한이 (공개 키) 거부 - 사용자 설명서
— 팻

22

미사 바에 의해 링크 된 http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/ 의 세부 사항은 저에게 매우 효과적입니다.

해당 페이지에서 :

$ touch ~/.ssh/config

그런 다음 해당 파일을 다음과 같이 편집하십시오 (계정 당 하나의 항목).

#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-COMPANY
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_COMPANY

8
또한 git clone git@github-COMPANY/repo/name.git올바른 ssh 키를 얻는 것과 같은 복제 (및 다른 명령)를 수행 할 때 "github.com"또는 "github-COMPANY"중 하나를 사용해야한다는 점에 유의해야합니다 .
— 헬라 탄

@ dtan : https를 통해 복제 해야하는 경우 어떻게 구현합니까? git clone https://github-COMPANY/GitUserName/projectname.git작동하지 않는 것 같습니다. github.com을 사용하는 기본 키는 정상적으로 작동합니다.
— Isaac Nequittepas

1
@ IsaacRemuant, 당신은 절대적으로 https를 거쳐야합니까? 풀 / 푸시를 할 때마다 사용자 자격 증명을 입력해야합니다. git : //github-COMPANY...projectname.git을 수행하는 것이 가장 좋습니다. https 호출에 대한 오류 메시지가 있습니까?
— 헬라 탄

@ dtan : 분명히 나에게 열려 있었음에도 불구하고 포트 22에 약간의 문제가있었습니다. ssh: connect to host github.com port 22: Bad file number fatal: The remote end hung up unexpectedly. 지금까지 https가 유일한 방법이었습니다. $ git clone https://github-USER/UserName/test_project_user.git Cloning into test_project_user... error: Couldn't resolve host 'github-USER' while accessing https://github-USER/N UserName/test_project_user.git/info/refs fatal: HTTP request failed 구성 파일과 관련이 있거나 https로 git call을 에뮬레이트하려는 방식과 관련이 있는지 확실하지 않습니다.
— Isaac Nequittepas

궁극적으로 모든 것을 시도하는 심층 분석을 수행하고 질문으로 적절하게 게시합니다.
— Isaac Nequittepas

13
  • ~ / .ssh로 이동
  • config (확장자 없음) 파일을 작성하십시오.
  • 구성 파일을 열고 아래 코드를 추가하십시오. (계정에 따라 변경)

    1. 계정 1

      # account_1
      Host gitlab.com-account_1
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_account_1
      
    2. 계정 2

      # Account2
      Host gitlab.com-Account2
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account2
      
    3. 계정 3

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • 다음과 같이 원격 URL을 추가하십시오.

    1. 계정 1

      git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
      
    2. 계정 2

      git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
      
    3. 계정 3

      git remote add origin github.com-Account3:github_username/repo_name.git
      

IdentityFile 이름이 ssh 키 생성 중에 생성 한 것과 동일해야합니다.


왜 사용하는지 설명해 주 PreferredAuthentications publickey시겠습니까?
— Oliver Pearmain

@OliverPearmain 여기서 ssh에게 선호하는 인증 방법은 publickey입니다. PreferredAuthentications에서 비밀번호를 사용할 수 있지만 인증을 위해 비밀번호를 입력해야 할 수도 있습니다.
— Pranav VR

1
내가 :-) 같은 사용하려는 것 같은데, 응답 @Pranav VR을 주셔서 감사합니다
— 올리버 Pearmain

11

쉘 스크립트를 사용하여 "활성화"하려는 계정으로 전환합니다. 기본적으로 처음부터 시작하여 하나의 계정을 올바르게 구성하고 작동시킨 다음 이러한 파일을 적절한 접두사를 가진 이름으로 옮깁니다. 그런 다음 "github"또는 "gitxyz"명령을 사용하여 다음을 전환 할 수 있습니다.

# my github script
cd ~/.ssh

if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
    ; 
else 
    echo "Error: missing new files"
    exit 1
fi 

# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"

rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"

ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config

git config --global user.email "dhoerl@<company>.com"
git config --global github.user "dhoerl"        
git config --global github.token "whatever_it_is"

ssh-add -D

나는 이것으로 큰 행운을 얻었다. 또한 Xcode에서 실행 스크립트를 만들었으므로 (Mac 사용자를 위해) git를 사용하기 때문에 적절한 설정이 없으면 프로젝트를 빌드하지 않습니다.

/ bin / ksh를 쉘로 사용하여 종속성 뒤에 배치 된 스크립트를 실행하십시오.

if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ]
then
    exit 1
fi

편집 : 새 파일이 있는지 테스트하고 이전 파일을 / tmp에 복사하여 아래 @naomik의 주석을 처리합니다.


여러 질문에 대한 복사 및 붙여 넣기 상용구 / 언어 답변을 게시 할 때 커뮤니티에서 '스팸 (spammy)'으로 표시되는 경향이 있습니다. 이 작업을 수행하는 경우 일반적으로 질문이 중복되는 것을 의미하므로 대신 stackoverflow.com/questions/7548158 , stackoverflow.com/questions/3225862 , stackoverflow.com/questions/7924937
— Kev

1
이것은 악몽이다. 누군가 자신 id_rsa과 id_rsa.pub키가 삭제 된다는 것을 이해하기 전에이 스크립트를 실행 하면 원격으로 잠길 수 있습니다.
— 감사합니다

@naomik은 새 파일을 먼저 확인하고 / tmp에 오래된 파일을 저장하도록 스크립트를 업데이트했습니다.
— David H

10

이 답변은 초보자 를 위한 것입니다 (아무 git 전문가) . 나는 최근 에이 문제를 겪었을지도 모르지만 대부분의 대답은 git에 대한 사전 이해가 필요한 것으로 보입니다. 이 스레드를 포함하여 여러 스택 오버플로 답변을 읽은 후 GitHub 계정을 쉽게 전환하기 위해 수행해야 할 단계는 다음과 같습니다 (예 : 두 개의 GitHub 계정, github.com/personal 및 gitHub.com/work 가정 ).

  1. 기존 ssh 키 확인 : 터미널을 열고이 명령을 실행하여 기존 ssh 키ls -al ~/.ssh
    파일을 보거나 나열하십시오.확장자.pub가있는파일은 ssh 키이므로personal및work계정에대해 두 개가 있어야합니다. 하나만 있거나없는 경우, 다른 현명한 생성 시간은이 단계를 건너 뜁니다.

    - 생성 SSH 키 님의 GitHub의 (. 중 개인 또는 직장 ACC), 탐색에 로그인 설정 과는 관련 이메일을 복사합니다.
    이제 터미널로 돌아가서을 실행ssh-keygen -t rsa -C "the copied email"하면 다음을 볼 수 있습니다 :

    공개 / 개인 rsa 키 페어 생성.
    키 (/.../.ssh/id_rsa)를 저장할 파일을 입력


    하여 id_rsa_gsg_keypair 곧 생성 할 SSH 키에 대한 기본 이름이 너무 경로를 복사하고, 예를 들어, 기본 이름을 변경 /.../.ssh/id_rsa_work업무용 계정을 생성하는 경우 암호를 입력하거나 그냥 입력하여 무시하면 키의 randomart 이미지는 다음 과 같습니다 . 끝난.
    두 번째 github 계정에 대해이 단계를 한 번 더 반복하십시오. 덮어 쓰지 않도록 올바른 이메일 주소와 다른 ssh 키 이름 (예 : id_rsa_personal)을 사용해야합니다.
    이 단계에서 ls -al ~/.ssh다시 실행할 때 두 개의 ssh 키가 표시 됩니다.
  2. ssh 키를 gitHub 계정과 연결 : 다음 단계는 ssh 키 중 하나를 복사하여 실행하지만 자신의 ssh 키 이름 : pbcopy < ~/.ssh/id_rsa_work.pub을 바꾸는 id_rsa_work.pub것입니다.
    이제 ssh 키가 클립 보드에 복사되었으므로 github 계정으로 돌아가서 [복사 한 ssh 키가있는 경우 업무용 계정으로 로그인했는지 확인하십시오 id_rsa_work]
    설정-SSH 및 GPG 키로 이동 하고 새 SSH 키 버튼을 클릭하십시오. ( 새 GPG 키 btw : D가 아님)
    이 키의 제목을 지정하고 키를 붙여 넣고 SSH 키 추가를 클릭하십시오. 이제 ssh 키를 성공적으로 추가했거나 ssh 키를 모두 추가했거나 새 GPG 키 를 선택했기 때문에 오류가 발생했습니다. 대신 했습니다)새 SSH 키 : D).
  3. ssh 키를 gitHub 계정과 연결 : 두 번째 계정에 대해 위 단계를 반복하십시오.
  4. 전역 git 구성 편집 : 마지막 단계는 전역 구성 파일이 모든 github 계정을 인식하는지 확인하는 것입니다. 이 글로벌 파일을 편집하기 위해
    실행하십시오. git config --global --editvim이 열리고 사용 방법을 모르는 경우을 눌러 i삽입 모드로 들어가서 파일을 아래와 같이 편집 한 다음 esc :wq를 누르고 삽입 모드를 종료하십시오.

    [inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true

완료! 이제 리포지토리에서 푸시 또는 풀을 시도 할 때 어떤 리포트와 어떤 GitHub 계정을 연결해야하는지 묻는 메시지가 표시되며 한 번만 요청하면 로컬 구성은 글로벌 구성이 아닌이 링크를 기억하므로 작업 할 수 있습니다 매번 전역 구성을 편집 할 필요없이 다른 계정과 연결된 다른 저장소에 있습니다.


그들은 대답을 위해 태그를 허용해야합니다. 이것은 mac OS 용입니다.
— user4015990

5

혼란을 피하기 위해 간단하고 쉬운 수정 ..

Windows 사용자가 다른 프로젝트에 여러 개의 또는 다른 자식 계정을 사용할 수 있습니다.

다음 단계 : 제어판으로 이동하여 자격 증명 관리자를 검색하십시오. 그런 다음 자격 증명 관리자-> Windows 자격 증명으로 이동하십시오.

이제 Generic Credentials Heading 아래 에서 git : https // github.com 노드를 제거하십시오 .

현재 자격 증명이 제거됩니다. 이제 당신은 git pull을 통해 프로젝트를 추가 할 수 있으며 사용자 이름과 비밀번호를 요구합니다.

다른 계정에 문제가 있으면 동일한 절차를 수행하십시오.

감사

이미지 참조


4

각 리포지토리에 대한 자격 증명을 사용하여 Windows에서 이것을 파악했습니다.

cd c:\User1\SomeRepo
git config --local credential.https://github.com.user1 user1
git config --local credential.useHttpPath true
git config --local credential.helper manager
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

자격 증명의 형식입니다. https://github.com . 자격 증명 도우미에게 자격 증명의 URL을 알려줍니다. 'useHttpPath'는 신임 정보 관리자에게 신임 정보의 경로를 사용하도록 지시합니다. useHttpPath가 생략되면 자격 증명 관리자는 https://github.com에 대한 자격 증명 하나를 저장 합니다. 포함 된 경우 자격 증명 관리자는 여러 자격 증명을 저장하므로 실제로 원합니다.


2

이 보석이 매우 유용하다는 것을 알았습니다. sshwitch

https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch

ssh 키를 전환하는 데 도움이됩니다. 모든 것을 먼저 백업해야합니다!

또한 커밋에 올바른 이메일 주소가 있는지 확인하기 위해 ~ / .gitconfig 파일에 올바른 이메일 주소가 있는지 확인했습니다.


2

여러 계정에 대해 여러 SSH 키를 만드는 것 외에도 동일한 계정 전자 메일을 사용하여 각 프로젝트 에 공동 작업자 를 추가 하고 암호를 영구적으로 저장하는 것도 고려할 수 있습니다 .

#this store the password permanently
$ git config --global credential.helper wincred

다른 이메일로 여러 계정을 설정 한 다음 공동 작업자 중 하나와 동일한 사용자 및 이메일을 각 계정에 추가했습니다. 이런 식으로 SSH 키를 추가하거나 다른 사용자 이름으로 바꾸지 않고 인증을 위해 이메일을 보내지 않고도 모든 계정에 액세스 할 수 있습니다.


2

가장 쉽고 직접적인 접근 방식 (IMHO)-구성 파일이 너무 많지 않음

다른 ssh 키를 만드십시오.

새로운 작업 GitHub 계정을 가지고 있다고 가정 해 보겠습니다.

sh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"`

이제 당신은 그들을 구하기 위해 오래된 것과 새로운 것을 가지고 있어야합니다 :

ls -al ~/.ssh

위를 한 번만 실행하면됩니다.

이제부터 둘 사이를 전환 할 때마다 다음을 실행하십시오.

ssh-add -D
ssh-add ~/.ssh/id_rsa_work_user1 #make to use this without the suffix .pub

이전 스위치로 전환하려면 다음을 다시 실행하십시오.

 ssh-add -D
 ssh-add ~/.ssh/<previous id_rsa>

1

또 다른 쉬운 방법은 Github 데스크톱에서 계정 A를 사용하는 동안 Github Kraken에서 계정 B를 사용하는 것과 같은 여러 데스크톱 앱을 사용하는 것입니다.



1

~/.ssh/config여기에 언급 된 파일 을 엉망으로 만들고 싶지 않은 경우 git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"다른 계정에서 커밋하려는 리포지토리에서 실행할 수 있습니다.

나머지 설정은 동일합니다.

  1. 두 번째 계정으로 새 SSH 키를 만듭니다. ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. , 다른 계정으로 GitHub의에 로그인으로 이동 https://github.com/settings/keys , 그리고 내용을 붙여~/.ssh/custom_id_rsa.pub

  3. HTTPS 대신 SSH를 원격 URL로 사용하고 있는지 확인하십시오. git remote set-url origin git@github.com:upstream_project_teamname/upstream_project.git



0

다른 답변과 달리 동일한 컴퓨터에서 두 개의 다른 github 계정 을 사용 하려면 몇 단계 를 거쳐야합니다. .

당신은 단지해야합니다 :

1) 아래의 각 계정에 대해 SSH 공개 및 개인 키 쌍 을 생성 하십시오.~/.ssh 이름이 다른 위치

2) 생성 된 공개 키를 >> >> 의 해당 계정에 추가합니다.SettingsSSH and GPG keysNew SSH Key .

SSH 공개 및 개인 키 쌍 을 생성하려면 다음 명령을 사용하십시오.

cd ~/.ssh
ssh-keygen -t rsa -C "email@work.com" -f "id_rsa_WORK"
ssh-keygen -t rsa -C "email@gmail.com" -f "id_rsa_PERSONAL"

위의 명령의 결과로, id_rsa_WORK그리고 id_rsa_WORK.pub파일은 생성됩니다 작업 과 - 계정 (git.work.com 예) id_rsa_PERSONAL및id_rsa_PERSONAL.pub 생성 될 것이다 개인 (- github.com 예) 계정.

만든 후에는 각 대중의 콘텐츠를 복사하십시오 (*.pub ) 파일 하고 각 계정에 대해 2 단계를 수행하십시오.

추신 : ~/.ssh/config두 계정의 호스트 이름이 다른 경우 다른 답변에서 언급 한 것처럼 각 자식 계정에 대해 파일 아래에 호스트 항목을 만들 필요가 없습니다 .


로컬 PC에서 두 계정간에 어떻게 전환합니까?
— user4015990

1
전환 할 필요가 없습니다. 로컬에서 저장소를 복제 할 때마다 계정 정보는 로컬 저장소의 자식에 의해 저장됩니다. 따라서 로컬 리포지토리에서 git push 또는 pull을 수행 할 때마다 위의 구성은 고려해야 할 계정을 감지합니다.
— Sahil Chhabra

0

당신이 일어날 경우 WSL을 WSL에 하나의 창문에서 한 - 두 개의 별도의 자식 계정을 가질 수 있습니다 설치되어 있어야합니다.


0

몇 가지 일반적인 자격 증명을 사용하여 프로젝트를 푸시해서는 안됩니다. 새 머신에서 시작하면 다음 단계를 사용하여 gitlab 자격 증명을 올바르게 설정하고 사용하십시오.

  • 기계에 음모 / 개인 ssh 키를 만듭니다.
  • 공개 키를 gitlab / github ui 인터페이스에 붙여 넣습니다 (cmd 줄을 통해 사용법을 암시하는 사람은 무료 맥주를 얻습니다 ...)
  • http url이 아닌 git을 통해 repo를 복제해야합니다.
  • git 명령에 동일한 접두사를 지속적으로 입력하지 않도록 git alias 설정
  • 자식 커밋 동안 항상 저자와 전자 메일 플래그를 사용하십시오.
  • 평소처럼 git을 사용하십시오.

이 모든 것은 다음과 같습니다.

 # create the public / private key credentials on that specific machine
 ssh-keygen -t rsa -b 4096 -C "<<you>>@org.net" -f ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # setup your public key in the gitlab ui 
 cat ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # make sure you clone the repo via the git and not http url
 git clone git@git.in.org.net:org/some-repo.git

 # set the git alias to avoid constant typing of the repeating prefix to the git cmd
 alias git='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.<<you>>.`hostname -s`" git'

 # during git commit ALWAYS use the author and e-mail flags
 git add --all ; git commit -nm "$git_msg" --author "YourFirstName YourLastName <you@phz.fi>"

 # use git as normal
 git fetch --all; git pull --all 

0
  1. 변경 사항을 다른 GitHub 계정으로 푸시하려는 디렉토리로 이동하십시오.
  2. 터미널 / 명령 행에서 새 SSH 키를 작성하십시오.

    ssh-keygen -t rsa -C“이메일 주소”

  3. 그러면 다음이 표시됩니다.

    공개 / 개인 rsa 키 쌍 생성 키를 저장할 파일을 입력하십시오 (/home/your_username/.ssh/id_rsa).

경로와 파일의 식별 가능한 이름을 복사하여 붙여 넣습니다.

/home/your_username/.ssh/id_rsa_personal

4) 그러면 다음을 요청합니다.

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

5) 이제 다음 명령을 입력하여 로컬 시스템에있는 모든 SSH 키를 볼 수 있습니다.

ls -al ~/.ssh

새 SSH 키 파일을 볼 수 있어야합니다. 내 것에서 볼 수 있듯이 id_rsa_test와 id_rsa_personal.pub가 있습니다.

drwx------  2 gmadmin gmadmin 4096 Nov 16 22:20 .
drwxr-xr-x 42 gmadmin gmadmin 4096 Nov 16 21:03 ..
-rw-------  1 gmadmin gmadmin 1766 Nov 16 22:20 id_rsa_personal
-rw-r--r--  1 gmadmin gmadmin  414 Nov 16 22:20 id_rsa_personal.pub
-rw-r--r--  1 gmadmin gmadmin  444 Nov  6 11:32 known_hosts

6) 다음으로 id_rsa_personal.pub 파일에 저장된 SSH 키를 복사해야합니다. 선택한 텍스트 편집기에서이 파일을 열 수 있습니다. 현재 atom을 사용하고 있으므로 다음 명령을 사용하여 파일을 열었습니다.

atom ~/.ssh/id_rsa_personal.pub

그런 다음 이와 비슷한 것을 얻습니다.

ssh-rsa AAB3HKJLKC1yc2EAAAADAQABAAABAQCgU5 + ELtwsKkmcoeF3hNd7d6CjW + dWut83R / Dc01E / YzLc5ZFri18doOwuQoeTPpmIRVDGuQQsWDWHQHQHWHQHWHQHWHQHWHQQYQWHQQHWHQHWHQQHWHQHWHQHWHQHWHQHWHQQYQQHZHQQYQQHZHQQYQQHZHQQYQQHZHQQYQQHZHQQYQQHZHQQYQQHZHQQYQQHZHQQYQQYQ

7) 이것을 복사하고 GitHub 계정 → 설정 → SSH 및 GPG 키로 이동하십시오. 8) 새 SSH 키를 클릭하십시오. 키를 복사하고 제목을 지정한 다음 추가하십시오. 9) 터미널에서 키 추가

ssh-add ~/.ssh/id_rsa_personal
Enter passphrase for /home/your_username/.ssh/id_rsa_personal: 

10) 사용자 및 비밀번호를 구성하십시오.

git config --global user.name "gitusername"
git config --global user.email "gitemail"

11) 우리는 지금 커밋하고 추진할 준비가되었습니다.

git init
git add .
git commit 
git push

0

다른 저장소를 작성하거나 복제 한 경우 다음 명령을 사용하여 해당 디렉토리에서 ssh 키 를 가져 origin오거나 upstream추가 할 수없는 경우 다음 명령이 작동했습니다.

이것은 내가 여기에 왔던 오류입니다.

Warning: Permanently added the RSA host key for IP address '61:fd9b::8c52:7203' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

나는 다음 명령을 사용했다.

ssh-add ~/.ssh/id_rsa_YOUR_COMPANY_NAME

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