여러 SSH 공개 키 사용


97

Unfuddle에 개인 계정과 회사 계정이 있습니다. Unfuddle SSH 키는 단일 계정에서만 사용할 수 있으므로 랩톱에서 두 계정에 대해 별도의 SSH 키를 만들어야합니다. ssh-keygen -t rsa이름이 다른 두 개의 키를 생성하기 위해 실행 했습니다 (개인은 기본 이름이고 회사는 {company} _rsa 임). 문제는 이제 기본 키가 모든 곳에서 사용되는 것으로 보이며 개별 저장소에 Git에서 사용할 키를 지정하는 방법을 찾을 수 없다는 것입니다.

그래서 내 질문은 : repo-to-repo로 사용할 SSH 키를 어떻게 지정합니까?

ssh_config (~ / .ssh / config)를 설정했지만 여전히 작동하지 않는 것 같습니다.

구성 :

Host {personalaccount}.unfuddle.com
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/id_rsa

Host {companyaccount}.unfuddle.com
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile /Users/dave/.ssh/cage_rsa

내 회사 계정 계정의 리포지토리에 대한 내 Git 리포지토리 구성 파일은 다음과 같습니다.

[remote "origin"]
     url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
     fetch = +refs/heads/*:refs/remotes/origin/*

따라서 내 ssh 구성 또는 git 구성에 문제가 있는지 확실하지 않습니다.


ssh 구성이 올바르게 보입니다. 유사한 구성을 사용하고 있습니다.
Paŭlo Ebermann

답변:


109

당신이 활성화 된 경우 SSH 에이전트 당신의 한 id_rsa키로드를, 다음 문제는 가능성이 SSH는 먼저 해당 키를 제공하고있다. Unfuddle은 인증을 위해 (예 : sshd에서 ) 승인하지만 회사 리포지토리에 액세스하기 위해 인증을 거부합니다 (예 : 인증에 사용하는 내부 소프트웨어, Gitolite와 유사). 회사 계정에 개인 키를 추가하는 방법이있을 수 있습니다 (여러 사람이 동일한 corp_rsa공개 및 개인 키 파일을 공유하지 않습니까?).


IdentitiesOnly .ssh/config구성 키워드는 키 제한 할 수 있습니다 ssh를 원격으로 제공 SSHD을 단지로 지정된하는 IdentityFile키워드 (예 : 그것은 활성에로드 할 일이 추가 키 사용을 거부합니다 SSH 에이전트를 ).

다음 .ssh/config섹션을 시도하십시오 .

Host {personalaccount}.unfuddle.com
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host {companyaccount}.unfuddle.com
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

그런 다음 Git URL을 다음과 같이 사용하십시오.

git@{personalaccount}.unfuddle.com:{personalaccount}/my-stuff.git
git@{companyaccount}.unfuddle.com:{companyaccount}/their-stuff.git

.ssh/config메커니즘 을 최대한 활용하려면 고유 한 사용자 정의 호스트 이름을 제공하고 기본 사용자 이름을 변경할 수 있습니다.

Host uf-mine
     HostName {personalaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/id_rsa
     IdentitiesOnly yes

Host uf-comp
     HostName {companyaccount}.unfuddle.com
     User git
     IdentityFile ~/.ssh/{companyaccount}_rsa
     IdentitiesOnly yes

그런 다음 Git URL을 다음과 같이 사용하십시오.

uf-mine:{personalaccount}/my-stuff.git
uf-comp:{companyaccount}/their-stuff.git

7
동일한 Unfuddle 하위 도메인 (다른 SSH 키 포함)에 여러 계정이있는 경우 두 번째 방법을 사용해야합니다.
leolobato

내 gitolite 설정에서는 나에게만 필수적이었습니다. 감사합니다!
코엔.

1
멋진 모든 키가 github에 전송되는 문제를 해결합니다. 그러나 OS XI에서는 매번 암호 문구를 입력해야합니다. config에 지정된 키만 사용하고 ssh 에이전트를 계속 사용하는 방법이 있습니까?
Drew

1
@Drew : 키가 이미 에이전트에로드 된 경우 명령은 여전히 ​​에이전트에서 키를 가져와야합니다. 키가 사전로드되어 있습니까? ssh-add -lGit 호스트 별명을 사용하기 전에 확인하십시오 . 또한 공개 키 파일이 있어야 sshssh-agent 가 저장 하는 키를 인식 할 수 있습니다 . .pub과 같은 명령 으로 손실 된 파일을 재생성 할 수 있습니다 ssh-keygen -f blah -y > blah.pub.
Chris Johnsen

응 거기있어 IdentitiesOnly 호출을 제거하면 github 4 다른 키를 보냅니다 (암호를 요구하지 않는 올바른 키 포함). 전화를 추가하면 하나의 키만 보내지 만 매번 암호 문구를 요청합니다. OSX에 암호 문구 값을 키 체인에 저장하도록 지시하더라도.
Drew

3

man ssh_config

같은 것

Host personal_repo
  User personal
  IdentityFile .ssh/personal_rsa

Host company_repo
  User company
  IdentityFile .ssh/company_rsa

그리고 personal_repogit repo에서 호스트로 사용하십시오.


태스, 위에서 변경 한 내용을 검토 할 수 있습니까? ssh_config와 git config를 추가했습니다.

Host단지 식별자 일 뿐이며 전체 도메인 이름이 필요하지 않습니다. 아마 숨겨진 버그가 생길 수 있습니다. 변경하면 git config에 전체 이름을 입력 할 필요가 없습니다.

gitorious, user = git 및 host gitorious.org : eg git@gitorious.org : ~ revelut / qt / bruce-sandbox-qt.git 호스트에서 URL의 일부를 어떻게 일치합니까? (일반적으로 ~ 나를 위해 계시)

@Tass 따라서 SSH 구성에 company_unfuddle이라는 이름을 지정하면 내 URL은 git @ company_unfuddle : {company} /overall.git? @Bruce-당신이 무엇을 요구하는지 잘 모르겠습니다. 좀 더 확장 해 주시겠습니까?

3

IdentityFile 및 Identities 만 제대로 작동합니다. 내가 연결하는 데 다른 호스트 이름을 사용해야한다는 것을 기억해야하는 것과 전달 된 에이전트 연결이 여전히 모든 키를 보유하고 있다는 사실은 원격 호스트가 손상되면 내가있는 동안 내 ID를 사용할 수 있음을 의미합니다. .

최근에 다음을 사용하기 시작했습니다.

https://github.com/ccontavalli/ssh-ident

ssh를 감싸는 래퍼입니다.

  • 정의한 각 ID에 대해 완전히 별도의 에이전트를 유지합니다.
  • 로그인 세션에서 에이전트를 자동으로 공유하며 .bashrc에서 수행 할 작업은 없습니다.
  • 필요할 때 에이전트와 해당 키를 필요할 때로드합니다.
  • ssh 명령 행 (호스트 이름 등) 또는 현재 작업 디렉토리를 기반으로 사용할 에이전트를 결정합니다. 이것은 내가하고있는 일에 따라 다른 경로에서 일하는 경향이 있기 때문에 특히 편리합니다.

0

ssh 에이전트를 사용하려는 경우 올바른 방법이 있습니다.

# Create public keys to make sure they exist
# this is a must if you use ssh agent forwarding
# or want to use ssh-agent at all
ssh-add -L | grep personal > ~/.ssh/personal_identity.pub
ssh-add -L | grep company > ~/.ssh/company_identity.pub


# Add to ~/.ssh/config
Host {personalaccount}.unfuddle.com
  IdentityFile ~/.ssh/personal_identity.pub

Host {companyaccount}.unfuddle.com
  IdentityFile ~/.ssh/company_identity.pub

설명 : ~ / .ssh 디렉토리에 개인 키가 있으면 ssh-agent가 사용되지 않습니다. ssh가 ssh-agent를 사용하도록 다른 이름으로 공개 키를 만듭니다. 개인 키에 액세스 할 수없는 경우에도 도움이됩니다 (예 : ssh 에이전트 전달).


ssh-add -L그렇지 않을 수도 있습니다 ssh-agent.
ives

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