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 에이전트 당신의 한 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
답변
man ssh_config
같은 것
Host personal_repo
User personal
IdentityFile .ssh/personal_rsa
Host company_repo
User company
IdentityFile .ssh/company_rsa
그리고 personal_repo
git repo에서 호스트로 사용하십시오.
답변
IdentityFile 및 Identities 만 제대로 작동합니다. 내가 연결하는 데 다른 호스트 이름을 사용해야한다는 것을 기억해야하는 것과 전달 된 에이전트 연결이 여전히 모든 키를 보유하고 있다는 사실은 원격 호스트가 손상되면 내가있는 동안 내 ID를 사용할 수 있음을 의미합니다. .
최근에 다음을 사용하기 시작했습니다.
https://github.com/ccontavalli/ssh-ident
ssh를 감싸는 래퍼입니다.
- 정의한 각 ID에 대해 완전히 별도의 에이전트를 유지합니다.
- 로그인 세션에서 에이전트를 자동으로 공유하며 .bashrc에서 수행 할 작업은 없습니다.
- 필요할 때 에이전트와 해당 키를 필요할 때로드합니다.
- ssh 명령 행 (호스트 이름 등) 또는 현재 작업 디렉토리를 기반으로 사용할 에이전트를 결정합니다. 이것은 내가하고있는 일에 따라 다른 경로에서 일하는 경향이 있기 때문에 특히 편리합니다.
답변
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 에이전트 전달).