[ssh] 여러 개의 GitHub 계정 및 SSH 구성

서로 다른 두 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.



답변

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


답변

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

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)을 변경해야합니다. 그러나 이제는 잘 가야합니다! 🙂


답변

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 개의 키를 생성하고 리포하는 것이 좋습니다. 더 많은 키를 처리 할 수 ​​있지만 손상 될 경우 취약성이 줄어 듭니다.


답변

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가있는 경우 가장 자세한 정보 제공).


답변

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

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


답변

다른 모든 답변에서 제안한 것처럼 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 구성 및 조건부 포함을 사용 하여이 방법을 여러 리포지토리로 확장 할 수도 있어야합니다 ( 예 참조 ).


답변

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

  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.

좋은 튜토리얼.

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