Eu tenho uma conta pessoal e uma conta corporativa no Unfuddle. No Unfuddle, as chaves SSH podem ser usadas apenas em uma única conta, por isso preciso criar uma chave SSH separada no meu laptop para as duas contas. Corri ssh-keygen -t rsa
para gerar duas chaves com nomes diferentes (pessoal é o nome padrão e a empresa é {company} _rsa). O problema agora é que parece que minha chave padrão é usada em todos os lugares e não consigo descobrir como especificar uma chave para usar no Git para repositórios individuais.
Portanto, minha pergunta é: como especificar uma chave SSH para usar em um repo-to-repo?
Eu configurei meu ssh_config (~ / .ssh / config), mas ele ainda não parece funcionar.
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
Meu arquivo de configuração de repositório Git para um repositório na conta de descompasso da minha empresa se parece com isso:
[remote "origin"]
url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
fetch = +refs/heads/*:refs/remotes/origin/*
Portanto, não tenho certeza se há algo errado com minha configuração ssh ou minha configuração git.
Respostas:
Se você tem um ativo ssh-agente que tem a sua
id_rsa
chave carregada, então o problema é provável que ssh está oferecendo essa chave em primeiro lugar. O Unfuddle provavelmente o aceita para autenticação (por exemplo, no sshd ), mas o rejeita para autorização para acessar os repositórios da empresa (por exemplo, em qualquer software interno que eles usem para autorização, possivelmente algo semelhante ao Gitolite). Talvez haja uma maneira de adicionar sua chave pessoal à conta da empresa (várias pessoas não estão compartilhando os mesmoscorp_rsa
arquivos de chave pública e privada, não é?).A
IdentitiesOnly
.ssh/config
palavra-chave de configuração pode ser usada para limitar as chaves que o ssh oferece ao sshd remoto apenas àquelas especificadas por meio deIdentityFile
palavras - chave (ou seja, ele se recusará a usar quaisquer chaves adicionais que por acaso sejam carregadas em um agente ssh ativo ).Tente estas
.ssh/config
seções:Em seguida, use URLs do Git como estes:
Se você quiser tirar o máximo proveito do
.ssh/config
mecanismo, poderá fornecer seu próprio nome de host personalizado e alterar o nome de usuário padrão:Em seguida, use URLs do Git como estes:
fonte
ssh-add -l
antes de usar o alias do host do Git. Além disso, o arquivo de chave pública precisa estar presente para que o ssh possa reconhecer a chave que o ssh-agent está armazenando. Você pode regenerar um.pub
arquivo perdido com um comando comossh-keygen -f blah -y > blah.pub
.man ssh_config
Algo como
E use
personal_repo
como host em seu repositório git.fonte
Host
é apenas um identificador - não há necessidade de nome de domínio completo. Isso provavelmente cria alguns erros ocultos. Se você mudar isso, não precisará digitar o nome completo na sua configuração do git.IdentityFile e IdentitiesOnly funcionam bem. O que me incomoda é ter que lembrar de usar nomes de host diferentes para me conectar e o fato de a conexão do agente encaminhado ainda conter todas as chaves, o que significa que, se o host remoto estiver comprometido, eles poderão usar qualquer uma das minhas identidades enquanto estiver .
Comecei recentemente a usar:
https://github.com/ccontavalli/ssh-ident
é um wrapper em torno do ssh, ele:
fonte
Aqui está uma maneira adequada se você deseja usar o agente ssh:
Explicação: se você tiver uma chave privada no diretório ~ / .ssh, o ssh-agent não será utilizado. Por isso, criamos chave pública com outro nome, para que o ssh seja forçado a usar o ssh-agent. Isso também ajuda se você não tiver acesso a chaves privadas (por exemplo, encaminhamento de agente ssh)
fonte
ssh-add -L
, nãossh-agent
.