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?


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 git@git.assembla.com:repo_name.git
         ^__ ^_______________
         user host

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 git@github.compode 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.



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.


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.


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.


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 git@github.comele 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!


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).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.