IT story

다중 GitHub 계정 및 SSH 구성

hot-time 2020. 4. 9. 08:07
반응형

다중 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에서 내 계정 중 하나를 식별 할 수 있습니다.

    git 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-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

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

  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.

좋은 튜토리얼.

호스트를 망치지 마십시오


나는 사용했다

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

괜찮 았어요.

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


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

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

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


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


여기에 내가 다루는 기술을 게시했습니다.

참고 URL : https://stackoverflow.com/questions/3225862/multiple-github-accounts-ssh-config

반응형