Estou com problemas para fazer com que duas chaves SSH / contas GitHub diferentes funcionem bem juntas. Eu tenho a seguinte configuração:
Repositórios acessíveis a partir de uma conta usando [email protected]:accountname
Repositórios acessíveis de outra conta usando [email protected]:anotheraccount
Cada conta tem sua própria chave SSH. As duas chaves SSH foram adicionadas e eu criei um arquivo de configuração. Não acredito que o arquivo de configuração esteja correto. Não sei ao certo como especificar que repositórios acessados usando [email protected]:accountname
devem id_rsa
e [email protected]:anotheraccount
devem usar id_rsa_anotheraccount
.
git pull
continuava falhando e solicitando a senha da escola, apesar dos arquivos de identidade separados, "IdentitiesOnly = yes", domínios e nomes de host separados, todos presentes emssh-add -l
... A chave uni era 'primeiro' independentemente da configuração. Teve que mover sua seção abaixo das outras em .ssh / config, e agora osgit pull
dois acessos do GitHub são bem-sucedidos sem solicitar a senha uni ssh.Respostas:
A resposta de Andy Lester é precisa, mas eu encontrei uma etapa extra importante que eu precisava dar para que isso funcionasse. Ao tentar configurar dois perfis, um para uso pessoal e outro para trabalho, o meu
~/.ssh/config
foi mais ou menos o seguinte:Meu perfil de trabalho não demorou até que eu fiz a
ssh-add ~/.ssh/work_rsa
. Depois disso, as conexões com o github usaram o perfil correto. Anteriormente, eles padronizavam a primeira chave pública.Para Não foi possível abrir uma conexão com seu agente de autenticação ao usar
ssh-add
,verifique: https://stackoverflow.com/a/17695338/1760313
fonte
ssh-add
era o que estava faltando.IdentitiesOnly yes
àHost *
seção do seu~/.ssh/config
arquivo. Isso diz ao ssh para realmente usar os IdentityFiles que você especificar, em vez de enviar spam ao servidor com todos eles.Recentemente, tive que fazer isso e analisar todas essas respostas e seus comentários para, eventualmente, reunir as informações. Por isso, colocarei tudo aqui, em um post, para sua conveniência:
Etapa 1: teclas ssh
Crie os pares de chaves necessários. Neste exemplo, me nomeei padrão / original 'id_rsa' (que é o padrão) e meu novo 'id_rsa-work':
Etapa 2: configuração do ssh
Configure vários perfis ssh criando / modificando ~ / .ssh / config . Observe os valores ligeiramente diferentes de 'Host':
Etapa 3: ssh-add
Você pode ou não precisar fazer isso. Para verificar, liste as impressões digitais de identidade executando:
Se suas entradas não estiverem lá, execute:
Etapa 4: teste
Para testar se você fez tudo isso corretamente, sugiro a seguinte verificação rápida:
Observe que você precisará alterar o nome do host (github / work.github) dependendo da chave / identidade que você deseja usar. Mas agora você deve estar pronto! :)
fonte
Digamos que
alice
seja um usuário do github.com, com 2 ou mais repositórios particularesrepoN
. Neste exemplo, trabalharemos com apenas dois repositórios nomeadosrepo1
erepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
Você precisa extrair esses repositórios sem inserir uma senha provavelmente em um servidor ou em vários servidores. Você deseja executar,
git pull origin master
por exemplo, e deseja que isso aconteça sem solicitar uma senha.Você não gosta de lidar com o ssh-agent, descobriu (ou está descobrindo agora) sobre
~/.ssh/config
um arquivo que informa ao seu cliente ssh qual chave privada usar, dependendo do nome do host e do nome de usuário, com uma entrada de configuração simples que se parece com isto:Então você foi em frente e criou seu
(alice_github.id_rsa, alice_github.id_rsa.pub)
par de chaves, depois também foi para o.git/config
arquivo do seu repositório e modificou o URL do seu controle remotoorigin
para algo como:E, finalmente, você foi à
Settings > Deploy keys
seção de repositório e adicionou o conteúdo dealice_github.id_rsa.pub
Neste ponto, você pode fazer o seu
git pull origin master
sem inserir uma senha sem problemas.mas e o segundo repositório?
Portanto, seu instinto será pegar a chave e adicioná-la às
repo2
chaves Deploy, mas o github.com cometerá um erro e informará que a chave já está sendo usada.Agora você gera outra chave (usando
ssh-keygen -t rsa -C "[email protected]"
sem senhas, é claro) e, para que isso não se torne uma bagunça, você irá nomear suas chaves assim:repo1
par de chaves:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
repo2
par de chaves:(repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
Agora você colocará a nova chave pública na
repo2
configuração do Deploy keys no github.com, mas agora você tem um problema com o ssh.Como o ssh pode dizer qual chave usar se os repositórios estiverem hospedados no mesmo
github.com
domínio?Seu
.ssh/config
arquivo apontagithub.com
e ele não sabe qual chave usar na hora de fazer o pull.Então, encontrei um truque no github.com. Você pode dizer ao seu cliente ssh que cada repositório vive em um subdomínio diferente do github.com; nesses casos, eles serão
repo1.github.com
erepo2.github.com
Então, a primeira coisa é editar os
.git/config
arquivos nos seus clones de repositório, para que eles fiquem assim:Para repo1
Para repo2
E então, no seu
.ssh/config
arquivo, agora você poderá inserir uma configuração para cada subdomínio :)Agora você pode,
git pull origin master
sem inserir nenhuma senha dos dois repositórios.Se você tiver várias máquinas, poderá copiar as chaves de cada uma delas e reutilizá-las, mas recomendo que trabalhe com as pernas para gerar 1 chave por máquina e repo. Você terá muito mais chaves para lidar, mas ficará menos vulnerável se uma delas for comprometida.
fonte
.ssh/config
é a etapa crucial - muito obrigado por isso #Eu tenho duas contas no github, e aqui está o que eu fiz (para
linux
) para fazê-lo funcionar.Chaves
ssh-keygen
, nomeie-as corretamente, para facilitar a vida.ssh-add path_to_private_key
Configuração
~ / .ssh / config
Defina o URL remoto para repo:
Para repo no Host
github-kc
:Para repo no Host
github-abc
:Explicação
Opções em
~/.ssh/config
:Host
github- <identify_specific_user>Host pode ser qualquer valor que possa identificar um host mais uma conta, não precisa ser um host real, por exemplo,
github-kc
identificar uma de minha conta no github do meu laptop local,Ao definir um URL remoto para um repositório git, é esse o valor a ser colocado depois
git@
, é assim que um repositório é mapeado para um host, por exemplogit remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git
Host
]Hostname
especifique o nome do host real, use apenas
github.com
para o github,User
git,o usuário é sempre
git
para o github,IdentityFile
especificar chave a ser usada, basta colocar o caminho de uma chave pública,
LogLevel
especifique o nível de log para depuração, se houver algum problema,
DEBUG3
fornece as informações mais detalhadas.fonte
ssh-add path_to_private_key
- provavelmente porque o agente não é necessário neste caso. O arquivo de configuração está definindo explicitamente o caminho para as chaves.ssh-add
porque suas chaves não são protegidas por senha ou (se você estiver em um Mac) o chaveiro OSX está lidando com isso para você.ssh-add
impede que você precise digitar a senha sempre que acessar suas chaves.Use o
IdentityFile
parâmetro em seu~/.ssh/config
:fonte
Uma alternativa possivelmente mais simples para editar o arquivo de configuração ssh (como sugerido em todas as outras respostas) é configurar um repositório individual para usar uma chave ssh diferente (por exemplo, não padrão).
Dentro do repositório para o qual você deseja usar uma chave diferente, execute:
E verifique se sua chave foi adicionada ao ssh-agent executando:
Lembre-se de que o comando acima adicionará apenas chave ao ssh-agent para sua sessão atual. Se você quer que isso funcione para sempre, você deve adicioná-lo "permanentemente" ao seu ssh-agent. Por exemplo, veja como fazer isso no ubuntu e aqui no OSX .
Também deve ser possível escalar essa abordagem para vários repositórios usando a configuração global do git e as inclusões condicionais ( veja o exemplo ).
fonte
No meu caso, nenhuma das soluções acima resolveu meu problema, mas o ssh-agent resolve. Basicamente, fiz o seguinte:
Gere um par de chaves usando o ssh-keygen mostrado abaixo. Irá gerar um par de chaves (neste exemplo
.\keyfile
e.\keyfile.pub
)ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile
Carregar
keyfile.pub
para o provedor gitps -ef | grep ssh-agent
se já está em execução)ssh-add .\keyfile
para adicionar credenciaisgit clone git@provider:username/project.git
fonte
Passei muito tempo para entender todas as etapas. Então, vamos descrever passo a passo:
ssh-keygen -t rsa
. Dê a ele uma alternativa comoproj1.id_rsa
e acerte sem dúvida, porque você não precisa de uma senha.Adicionar nova seção em
.ssh/config
:Leve em conta a primeira seção e observe que
proj1.github.com
voltaremos à seção mais tarde.ssh-add ~/.ssh/proj1.id_rsa
proj1.github.com
(exatamente o host do arquivo de configuração).git clone [email protected]
.Um bom tutorial.
Não mexa com os hosts
fonte
id_rsa_proj1
eproj1_id_rsa
na verdade devem ser os mesmos. Você também pode adicionar a parte sobre.git/config
configurações do tutorial à sua resposta.proj1.id_rsa
vs.proj1_id_rsa
Eu usei,
Wokred bem.
Use a configuração acima em seu arquivo .ssh / config para diferentes chaves rsa para diferentes nomes de usuário.
fonte
Como complemento da resposta de @stefano, é melhor usar o comando
-f
ao gerar uma nova chave SSH para outra conta,Como o
id_rsa_work
arquivo não existe no caminho~/.ssh/
, eu crio esse arquivo manualmente e não funciona :(fonte
Eu postei a técnica que eu uso para lidar com isso aqui
fonte