같은 컴퓨터에 여러 개의 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.nameuser.email--global플래그, 단지 그가 단지 하나 개의 repo에 대한 로컬로 설정 위의 말씀 않습니다. 그것은 많은 문제를 해결했습니다. 이제 이전
리포지토리

72

모양 만들기

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

우리가 두 번째 정체성의 repos를 당기는 / 밀어 시작하기 전에, 우리는 모양으로 당신을 얻을 해 -하자가 시스템이 일반에 설치 가정 id_rsaid_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 Hostmainuser키 를 사용하도록 설정되어 있습니다 . 한 계정을 다른 계정보다 선호하지 않으려면 업데이트 된 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-mainusergithub-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_rsaid_rsa.pub키가 삭제 된다는 것을 이해하기 전에이 스크립트를 실행 하면 원격으로 잠길 수 있습니다.
감사합니다

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

10

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

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

    - 생성 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_PERSONALid_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.