Git e SSH, qual chave é usada?

99

Digamos que seu .sshdiretório contenha 30 chaves (15 privadas e 15 públicas).

Onde no Git se pode verificar qual é usado para se conectar a um determinado repositório remoto?

James Raitsev
fonte
10
Quem votou para "fechar" esta questão - está diretamente relacionada à programação pela mesma razão que as perguntas sobre GIT são permitidas aqui
James Raitsev
1
Indiscutivelmente ... Esta é realmente uma questão de superusuário, o problema aqui não é o git, mas a plataforma em que ele está sendo executado. Você não pode verificar o problema "no git", porque o git não se importa, ele se refere apenas a como você usa o ssh e como ele está configurado. Você usa ssh-agent, qualquer tipo de sistema de gerenciamento de chaves, qual sistema operacional você usa, qual versão, etc.?
Arafangion

Respostas:

72

A seguinte entrada no .ssh/configarquivo resolve o problema

  host git.assembla.com
  user git
  identityfile ~/.ssh/whatever

Onde ~/.ssh/whateverestá um caminho para sua chave privada

Além disso, o usuário e o host podem ser obtidos em

git push [email protected]:repo_name.git
         ^__ ^_______________
         user host
James Raitsev
fonte
então se eu quisesse usar outra chave ssh para um host diferente, eu simplesmente repetiria a mesma depois da primeira ?? O arquivo de identidade pertence ao primeiro host antes dele?
MikeSchem
ok, sim, parece que esse é o caso cyberciti.biz/faq/…
MikeSchem
69

Executar ssh no modo verbose, também conhecido como ssh -v user@host, imprimirá uma grande carga de informações de depuração, que também contém detalhes sobre quais arquivos-chave ele está tentando fazer login.

debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/user/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 332
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).

Agora, se você combinar isso, com o Passo 4 na própria página de ajuda SSH do Git , ssh -vT [email protected]pode dar a resposta.

Nota: Você também pode usar a -iopção para informar ao ssh durante a execução do comando, qual arquivo-chave usar.

Vajk Hermecz
fonte
1
Você também pode executar o grep na saída de erro padrão do comando ssh para encontrar o arquivo de chave como este: ssh -vv user@host 2> >(grep Offering)- isso tornará as coisas mais fáceis. O último arquivo deve ser a chave pública. Por exemplo:debug1: Offering RSA public key: /Users/macbookpro/.ssh/id_rsa
Gianfranco P.
4
githubnão é a mesma coisa que git.
ForeverWintr
9

A menos que seja especificado no, .ssh/configele usará o arquivo de chave privada padrão.

O arquivo padrão é ~/.ssh/id_rsaou ~/.ssh/id_dsaou ~/.ssh/identitydependendo da versão do protocolo.

Rodrigo Flores
fonte
Quando as chaves são adicionadas a hosts conhecidos?
mountainLion
8

Eu diria que mais prático para o meu gosto seria:

GIT_SSH_COMMAND='ssh -v' git …

é claro, dependendo das circunstâncias, pode ser benéfico apenas exportá-lo para o ambiente SHELL atual para que você não tenha que anexá-lo manualmente a cada vez. Então seria assim:

export GIT_SSH_COMMAND='ssh -v'
git …

- Como man gitsugere, existem algumas variáveis ​​ambientais que afetariam as operações do Git com o uso de SSH. De acordo com man sshvocê pode obter algumas informações de depuração ao implantar a -vopção (não apenas, mas também, verifique o manual se estiver curioso para saber mais).

qual chave é usada?

Na saída, você veria algo como ...

debug1: Offering public key: …

... que é a resposta ao seu qn.

poige
fonte
2
SIM. Esta deve ser a resposta aceita. Para fazê-lo funcionar em janelas CMD (ugh), use: set GIT_SSH_COMMAND=ssh -v. Isso me ajudou a descobrir que o ssh-config Inlcude-Path deve ser algo assim no windows: Include /C/Users/YourUserName.ssh/configpara fazer o ssh e, portanto, o git usar um arquivo de configuração que usa, por exemplo, uma HOST *entrada para especificar o arquivo de identidade que git / ssh usa.
icyerasor
6

Uma vez que gitusa apenas sshpara se conectar, ele usará qualquer chave sshque for usada para se conectar ao host remoto. Consulte o ~/.ssh/configarquivo para obter detalhes; o hostbloco usa a IdentityFilediretiva para especificar a chave privada a ser usada. A página de ssh_config(5)manual contém todos os detalhes.

Sarnold
fonte
Hmm .. o arquivo não existe no meu sistema. Deveria?
James Raitsev
1
@JAM Qual sistema operacional você está usando? Além disso, às vezes o arquivo de configuração está em/etc/ssh/ssh_config
Estou no MACOS. Encontrado, o /etc/ssh_configque parece ser um arquivo cheio de entradas comentadas
James Raitsev
@sarnold Você pode criar ~/.ssh/configvocê mesmo.
xdazz
4

Isso pode ser super avançado, mas depois de executar ssh -vT [email protected]ele me mostrou que estava verificando /root/.sshas chaves, eu esperava que ele verificasse meu diretório inicial e então percebi que estava logado como root!

Moak
fonte
Esta técnica, entre outras da mesma sshforma de interrogatório, são as soluções corretas. Obrigado.
eigenfield
1

No servidor remoto, edite o arquivo sshd_config e altere LogLevel de INFO para VERBOSE e reinicie o ssh.

Agora seu arquivo de log conterá a impressão digital da chave que foi usada para autenticar cada usuário.

No Ubuntu, esses arquivos são:

/etc/ssh/sshd_config
/var/log/auth.log

mas eles podem ser diferentes em outra distro. Apenas google para sua localização (alguns usam / var / log / secure por exemplo).

seumasmac
fonte