여러 개의 GitHub 계정 및 SSH 구성


249

서로 다른 두 SSH 키 / GitHub 계정을 함께 사용하는 데 문제가 있습니다. 다음과 같은 설정이 있습니다.

하나의 계정으로 리포지토리에 액세스 git@github.com:accountname

다른 계정에서 액세스 할 수있는 리포지토리 git@github.com:anotheraccount

각 계정에는 고유 한 SSH 키가 있습니다. 두 SSH 키가 모두 추가되었으며 구성 파일을 만들었습니다. 그래도 구성 파일이 정확하지 않다고 생각합니다. 사용하여 액세스 한 repos git@github.com:accountname가 사용 id_rsa하고 git@github.com:anotheraccount사용해야 한다고 지정하는 방법을 잘 모르겠습니다 id_rsa_anotheraccount.


이 링크가 도움이되었다 medium.freecodecamp.org/…
jgreen

~ / .ssh / config에 3 개의 개별 SSH ID가 있습니다. 학교 서버용 암호는 암호가 있습니다. 별도의 작업 / 개인 GitHub 계정에 대한 2는 그렇지 않습니다. git pull별도의 신원 파일 "IdentitiesOnly = yes", 별도의 도메인 및 호스트 이름이 모두 있음에도 불구하고 실행이 계속 실패하고 학교 암호를 묻습니다 ssh-add -l. 유니 키는 해당 설정에 관계없이 '첫 번째'였습니다. .ssh / config에서 섹션을 다른 섹션 아래로 이동해야했으며 이제 git pull두 GitHub 계정에서 단일 ssh 비밀번호를 묻지 않고 성공했습니다.
mc01 '28

답변:


309

Andy Lester의 답변은 정확하지만이 작업을 수행하는 데 필요한 중요한 추가 단계를 찾았습니다. 개인용과 업무용의 두 가지 프로파일을 설정하려고 할 때 ~/.ssh/config대략 다음과 같습니다.

Host me.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/me_rsa

Host work.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/work_rsa

내가 할 때까지 내 직장 프로필을 가져 가지 못했습니다 ssh-add ~/.ssh/work_rsa. 그 후 github에 대한 연결은 올바른 프로파일을 사용했습니다. 이전에는 첫 번째 공개 키로 기본 설정되었습니다.

들어 당신의 인증 에이전트에 연결 열 수 없습니다 사용 ssh-add,
확인 : https://stackoverflow.com/a/17695338/1760313


39
감사! - ssh-add내가 놓친 것입니다.
현인

ssh-add를 사용하면 키에 대한 파일 권한이 올바르게 설정되지 않았 음을 알 수 있습니다. 일단 모든 것이 효과가 있다고 고쳤습니다. 감사합니다!
phatmann

6
doblock.com/articles/… 도 참조하십시오 . 핵심 정보는 원격 URL의 호스트 이름에 사용자 이름 (이 예에서는 "work")을 추가해야한다는 것입니다 (예 : git@work.github.com : work / my_repo.git) "git@github.com ..."과 반대)
BobS


15
"그들이 처음 공개 키에 기본값"하는 문제를 해결하려면 추가 IdentitiesOnly yes받는 Host *당신의 섹션 ~/.ssh/config파일. 이것은 ssh에게 사용자가 지정한 IdentityFile을 모두 서버에 스팸으로 보내는 대신 실제로 사용하도록 지시합니다.
기계 달팽이

172

최근에이 작업을 수행해야했고 정보를한데 모으기 위해이 모든 답변과 의견을 살펴보아야했기 때문에 편의를 위해 한 곳에 게시하겠습니다.


1 단계 : ssh 키
필요한 키 쌍을 만듭니다. 이 예에서는 기본 / 원본 'id_rsa'(기본값)와 새 이름 인 'id_rsa-work'를 지정했습니다.

ssh-keygen -t rsa -C "stefano@work.com"


2 단계 : ssh config ~ / .ssh / config
를 작성 / 수정하여 여러 ssh 프로파일을 설정하십시오 . 약간 다른 '호스트'값을 참고하십시오.

# Default GitHub
Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa

# Work GitHub
Host work.github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa_work


3 단계 : ssh-add
이 작업을 수행하거나 수행하지 않아도됩니다. 확인하려면 다음을 실행하여 신원 지문을 나열하십시오.

$ ssh-add -l
2048 1f:1a:b8:69:cd:e3:ee:68:e1:c4:da:d8:96:7c:d0:6f stefano (RSA)
2048 6d:65:b9:3b:ff:9c:5a:54:1c:2f:6a:f7:44:03:84:3f stefano@work.com (RSA)

항목이 없으면 다음을 실행하십시오.

ssh-add ~/.ssh/id_rsa_work


4 단계 :
테스트이 작업을 모두 올바르게 수행했는지 테스트 하려면 다음 빠른 확인을 제안합니다.

$ ssh -T git@github.com
Hi stefano! You've successfully authenticated, but GitHub does not provide shell access.

$ ssh -T git@work.github.com
Hi stefano! You've successfully authenticated, but GitHub does not provide shell access.

사용하려는 키 / ID에 따라 호스트 이름 (github / work.github)을 변경해야합니다. 그러나 이제는 잘 가야합니다! :)


1
이것은 큰 반응입니다. 나는 설정 파일 .. 감사합니다 :) 활용하는 모두 SSH 키를 추가 SSH-추가를 사용했다
gaurav.singharoy

내가 추가하고 싶은 유일한 것은 ssh-keygen -t rsa를 실행할 때 기본 파일 이름을 제공합니다. 즉, 사용자 정의 파일 이름을 입력합니다.
Donato

가장 좋은 답변 중 하나입니다. 또한이 비디오가 도움이되었습니다. youtube.com/watch?v=fnSRBRiQIU8&feature=youtu.be
TestingWithArif

이 게시물에 git config 'email'설정이 포함되어 있으면 좋을 것입니다. help.github.com/articles/…
Dave Engineer

43

alice2 개 이상의 개인 저장소가있는 github.com 사용자를 가정 해 봅시다 repoN. 이 예제에서는 두 개의 리포지토리 만 사용 repo1하고repo2

https://github.com/alice/repo1

https://github.com/alice/repo2

서버 또는 여러 서버에서 암호를 입력하지 않고 이러한 저장소에서 가져와야합니다. git pull origin master예를 들어, 암호를 요구하지 않고이 작업을 수행 하려고합니다.

ssh-agent를 다루는 것을 좋아하지 않고, ~/.ssh/configssh 클라이언트가 호스트 이름과 사용자 이름에 따라 사용할 개인 키를 알 수있는 파일 에 대해 발견했거나 현재 발견 하고 있습니다. 이:

Host github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/alice_github.id_rsa
  IdentitiesOnly yes

계속해서 (alice_github.id_rsa, alice_github.id_rsa.pub)키 쌍을 생성 한 다음 리포지토리 .git/config파일로 이동하여 리모컨의 URL을 다음과 같이 수정 origin했습니다.

[remote "origin"]
        url = "ssh://git@github.com/alice/repo1.git"

마지막으로 저장소 Settings > Deploy keys섹션으로 이동하여 내용을 추가했습니다.alice_github.id_rsa.pub

이 시점에서 git pull origin master문제없이 비밀번호를 입력하지 않아도됩니다.

그러나 두 번째 저장소는 어떻습니까?

따라서 본능은 해당 키를 잡고 repo2배포 키에 추가하는 것이지만 github.com은 오류가 발생하여 키가 이미 사용 중임을 알려줍니다.

이제 ssh-keygen -t rsa -C "alice@alice.com"암호없이 사용하여 다른 키를 생성 하여 엉망이되지 않도록 키 이름을 다음과 같이 지정합니다.

  • repo1 키 페어 : (repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
  • repo2 키 페어 : (repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)

이제 repo2github.com의 '키 배포'구성 에 새 공개 키 를 넣었지만 이제는 ssh 문제가 있습니다.

저장소가 동일한 github.com도메인 에서 호스팅되는 경우 ssh가 사용할 키를 어떻게 알 수 있습니까?

귀하의 .ssh/config파일 점 github.com과 그것의 시간이 풀을 할 때 사용할 키 모른다.

그래서 github.com에서 트릭을 찾았습니다. 다른 github.com 하위 도메인에있는 각 저장소의 삶, 이러한 경우에, 그들이 될 것이라고 당신은 ssh 클라이언트를 알 수 repo1.github.comrepo2.github.com

먼저 .git/configrepo 클론 의 파일을 편집하는 것이 다음과 같습니다.

repo1의 경우

[remote "origin"]
        url = "ssh://git@repo1.github.com/alice/repo1.git"

repo2의 경우

[remote "origin"]
        url = "ssh://git@repo2.github.com/alice/repo2.git"

그런 다음 .ssh/config파일에서 각 하위 도메인에 대한 구성을 입력 할 수 있습니다. :)

Host repo1.github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
  IdentitiesOnly yes

Host repo2.github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
  IdentitiesOnly yes

이제 git pull origin master두 리포지토리에서 암호를 입력하지 않아도됩니다.

여러 대의 컴퓨터가있는 경우 각 컴퓨터에 키를 복사하여 재사용 할 수 있지만 다리 작업을 수행하여 컴퓨터 당 1 개의 키를 생성하고 리포하는 것이 좋습니다. 더 많은 키를 처리 할 수 ​​있지만 손상 될 경우 취약성이 줄어 듭니다.


1
호스트와 일치하는 하위 도메인을 지정하는 .ssh/config것이 매우 중요한 단계입니다
Mike Miller

22

github에 2 개의 계정이 있으며 여기에 linux작동하도록하기 위해 수행 한 작업이 있습니다.

열쇠

  • 를 통해 2 쌍의 rsa 키 ssh-keygen를 만들어 이름을 올바르게 지정하면보다 쉽게 ​​사용할 수 있습니다.
  • 를 통해 로컬 에이전트에 개인 키 추가 ssh-add path_to_private_key
  • 각 github 계정마다 (고유 한) 공개 키를 업로드하십시오.

구성

~ / .ssh / config

Host github-kc
    Hostname        github.com
    User git
    IdentityFile    ~/.ssh/github_rsa_kc.pub
    # LogLevel DEBUG3

Host github-abc
    Hostname        github.com
    User git
    IdentityFile    ~/.ssh/github_rsa_abc.pub
    # LogLevel DEBUG3

repo에 대한 원격 URL을 설정하십시오.

  • 호스트의 리포지토리 github-kc:

    git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git
    
  • 호스트의 리포지토리 github-abc:

    git remote set-url origin git@github-abc:abcdefg/yyy.git
    

설명

의 옵션 ~/.ssh/config:

  • Hostgithub- <identify_specific_user>
    호스트는 호스트와 계정을 식별 할 수있는 임의의 값일 수 있습니다. 실제 호스트 일 필요는 없습니다. 예를 들어 github-kc로컬 랩톱의 github에서 내 계정 중 하나를 식별합니다

    자식의 REPO 원격 URL을 설정하면,이 후 넣어 값입니다 git@의 repo는 호스트, 예를 들어, 매핑 방법,git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git


  • [다음은 하위 옵션입니다 Host]
  • Hostname
    실제 호스트 이름을 지정하고 github.comgithub에 사용하십시오.
  • Usergit
    사용자는 항상 gitgithub입니다.
  • IdentityFile
    사용할 키를 지정하고 경로를 공개 키로 지정하십시오.
  • LogLevel
    디버그 할 로그 레벨을 지정하십시오 (문제 DEBUG3가있는 경우 가장 자세한 정보 제공).


ssh-add path_to_private_key이 경우 에이전트가 필요하지 않기 때문에 lovely했습니다 . 구성 파일은 키의 경로를 명시 적으로 정의합니다.
Mark Chackerian

2
@MarkChackerian ssh-add열쇠가 암호로 보호되어 있지 않거나 (Mac의 경우) OSX 키 체인이 당신을 위해 처리하고 있기 때문에 필요하지 않다고 생각 합니다. ssh-add키에 액세스 할 때마다 암호를 입력하지 않아도됩니다.
Ashhar Hasan

18

에서 IdentityFile매개 변수를 사용 하십시오 ~/.ssh/config.

Host github.com
    HostName github.com
    IdentityFile ~/.ssh/github.rsa
    User petdance

고맙지 만 이것은 정확하지 않습니다. 나는 대답을 발견하고 아래에서 공유했습니다.
radesix

나는 당신의 경우에 나의 접근 방식이 효과가 있다고 확신합니다. 다른 사용자와 다른 ID 파일을 식별 할 수 있습니다. 구성 스탠자에서 각각 다른 호스트 매개 변수를 제공하면됩니다.
Andy Lester

1
Andy, 아래에서 찾은 링크에 따르면 호스트에서 .com을 삭제해야했습니다. 일단 그렇게하면 잘 작동했습니다.
radesix

5

다른 모든 답변에서 제안한 것처럼 ssh 구성 파일을 편집하는 것보다 더 간단한 대안은 다른 (예 : 기본값이 아닌) ssh 키를 사용하도록 개별 저장소를 구성하는 것입니다.

다른 키를 사용하려는 저장소 내에서 다음을 실행하십시오.

git config core.sshCommand 'ssh -i ~/.ssh/id_rsa_anotheraccount'

그리고 다음을 실행하여 키가 ssh-agent에 추가되었는지 확인하십시오.

ssh-add ~/.ssh/id_rsa_anotheraccount

위 명령은 현재 세션의 ssh-agent에만 키를 추가한다는 점에 유의하십시오. 이것이 영원히 작동하게하려면 ssh-agent에 "영구적으로"추가해야합니다. 예를 들어 우분투OSX에 대해하는 방법이 있습니다 .

전역 git 구성 및 조건부 포함을 사용 하여이 방법을 여러 리포지토리로 확장 할 수도 있어야합니다 ( 예 참조 ).


4

모든 단계를 이해하기 위해 많은 시간을 보냈습니다. 단계별로 설명해 드리겠습니다.

  1. 을 사용하여 새 신원 파일을 만듭니다 ssh-keygen -t rsa. proj1.id_rsa암호를 필요로하지 않기 때문에 대안을 제시 하고 의심의 여지없이 공격하십시오.
  2. 에 새 섹션 추가 .ssh/config:

    Host proj1.github.com
        HostName github.com
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/proj1.id_rsa
    

첫 번째 섹션을 고려하고 proj1.github.com나중에 다시 섹션으로 돌아갑니다.

  1. ssh 에이전트에 ID 추가 ssh-add ~/.ssh/proj1.id_rsa
  2. 내가 처음 엉망인 것은-이제 proj1 저장소를 복제하려고 할 때 proj1.github.com(정확히 구성 파일의 호스트)를 사용하여 수행합니다 . git clone git@proj1.github.com.

좋은 튜토리얼.

호스트를 엉망으로 만들지 마십시오


turorial에 연결해 주셔서 감사합니다! 오타가 있습니다. 키 이름 id_rsa_proj1이며 proj1_id_rsa실제로는 동일해야합니다. .git/config튜토리얼의 설정 에 대한 부분 을 답변 에 추가 할 수도 있습니다 .
cezar

당신은 여전히 ​​오타가 있습니다 : proj1.id_rsavs.proj1_id_rsa
cezar

3

필자의 경우 위의 솔루션 중 어느 것도 내 문제를 해결하지 못했지만 ssh-agent는 해결합니다. 기본적으로 다음을 수행했습니다.

  1. 아래 표시된 ssh-keygen을 사용하여 키 페어를 생성하십시오. 이 (이 예에서는 키 쌍 생성 .\keyfile.\keyfile.pub)

    ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile

  2. keyfile.pub자식 공급자에게 업로드

  3. 머신에서 ssh-agent를 시작하십시오 ( ps -ef | grep ssh-agent이미 실행 중인지 확인할 수 있습니다 )
  4. ssh-add .\keyfile자격 증명을 추가하기 위해 실행
  5. 이제 당신은 실행할 수 있습니다 git clone git@provider:username/project.git

2

나는 사용했다

Host github.com
   HostName github.com
   IdentityFile ~/.ssh/github_rsa
   User abc@gmail.com

괜찮 았어요.

다른 사용자 이름에 대한 다른 rsa 키에 대해서는 .ssh / config 파일에서 위의 설정을 사용하십시오.


2

@stefano의 답변을 보완 -f하기 위해 다른 계정에 새 SSH 키를 생성 할 때 명령을 사용하는 것이 좋습니다 .

ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -C "your@mail.com"

이후 id_rsa_work파일 경로에 존재하지 않는 ~/.ssh/, 나는이 파일을 수동으로 작성하고 그것을 작동하지 않습니다 :(


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