Existe um repositório central de chaves SSH em um sistema? O keygen SSH coloca a chave privada nesse local?

0

Acabei de gerar uma chave pública e privada com ssh key gen. Enviei a chave pública para um sistema gitlab (basicamente um clone do git hub) da minha universidade e recebi um e-mail informando que carreguei a chave com sucesso . Quando tento executar um comando git clone, recebo

Cloning into 'csci6990-hci-f13'...
ssh_exchange_identification: Connection closed by remote host
fatal: The remote end hung up unexpectedly

Estou tentando entender se fiz tudo corretamente antes de culpar o sistema de laboratório git. Com isso dito, quando eu carreguei uma chave pública no git lab não havia instruções / etapas para dizer ao gitlab onde a chave privada reside no meu mac os x. Isso me faz pensar que talvez o sshkeygen coloque automaticamente a chave em algum tipo de local de repositório padrão? É esse o caso? Se não, como posso carregar uma chave pública e fazê-la funcionar sem informar ao sistema remoto onde a chave privada correspondente está dentro do sistema de arquivos?

Edit: esta é a saída de ssh -vvv

OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to gitlab.cs.uno.edu [137.30.120.92] port 22.
debug1: Connection established.
debug1: identity file /Users/abramhandler/.ssh/id_rsa type -1
debug1: identity file /Users/abramhandler/.ssh/id_rsa-cert type -1
debug1: identity file /Users/abramhandler/.ssh/id_dsa type -1
debug1: identity file /Users/abramhandler/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host
    
por bernie2436 17.09.2013 / 20:52

3 respostas

5

there were no instructions/steps for telling gitlab where the private key resides in on my mac os x

O servidor remoto não precisa saber onde está sua chave privada local. Nunca vê e nunca deveria. Ele permanece na sua máquina e não é transmitido nunca.

This makes me think that maybe sshkeygen automatically puts the key into some kind of standard repository location?

Há um nome de arquivo padrão mencionado quando ele pede que você (opcionalmente) defina seu próprio nome de chave, provavelmente /home/you/.ssh/id_rsa . Essa é a chave privada. Também cria uma chave pública com o sufixo .pub . Se você nomeá-los você mesmo, você pode colocá-los em qualquer lugar, mas AFAIK ambos os arquivos devem estar no mesmo diretório.

Se você não usa o nome padrão, para usar a chave, você deve registrá-lo com ssh-agent via ssh-add , ou então especificá-lo na linha de comando quando você chamar ssh, por exemplo:

ssh -i ~/.ssh/mykey ....

Observe que não é mykey.pub , mas (como mencionado) mykey.pub deve estar no mesmo diretório que mykey . Ou seja, -i refere-se à chave privada . Se a chave é protegida por senha, você será solicitado para isso. Então o ssh envia a chave pública para o servidor.

Se você não especificar uma chave com -i , a chave /home/you/.ssh/id_rsa , se houver, será usada. Se você estiver usando a chave padrão, você pode ignorar o resto disso.

Para usar uma chave não padrão com git (ou seja, se você desativou a opção "id_rsa"), será necessário registrá-la primeiro com ssh-agent . A idéia por trás do ssh-agent é usá-lo para invocar um shell ou algum outro aplicativo persistente que criará um shell a partir do qual você invoca o git (como a própria GUI, provavelmente existe um método específico do OSX). Por exemplo:

> ssh-agent bash

Inicia um novo subshell de ação sob o agente ssh. Próximo:

> ssh-add ~/.ssh/mykey

Novamente, a chave privada. Você pode adicionar quantos deles quiser. Subsequentemente, quando o ssh é usado dentro desse shell ou de um filho dele, ele tentará essa lista de chaves automaticamente com o servidor remoto. Para clonar com git:

git clone ssh://me@wherever/some/repo/path 
    
por 17.09.2013 / 21:22
3

Sim. Sua chave privada deve estar em ~ / .ssh / id_rsa ou ~ / .ssh / id_dsa dependendo do tipo de chave que você gerou. Assegure-se de que as permissões sejam estritas no arquivo.

Você também pode configurar um agente para armazenar em cache a frase secreta usada com a chave para simplificar ainda mais a configuração.

    
por 17.09.2013 / 21:20
1

É possível que você esteja atrás de um roteador que, de alguma forma, filtre ou manipule suas conexões de saída com a porta SSH de 137.30.120.92 ? Porque eu posso me conectar a esse servidor muito bem:

martin@martin ~ % ssh 137.30.120.92
The authenticity of host '137.30.120.92 (137.30.120.92)' can't be established.
ECDSA key fingerprint is 45:45:c0:59:c6:c9:50:22:7d:45:bf:cc:e2:9a:99:31.
+--[ECDSA  256]---+
|        .o=@*+o  |
|         o+o=  . |
|          ..    .|
|         .    o .|
|        S    . + |
|            . .  |
|           E .   |
|            B    |
|           =     |
+-----------------+
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '137.30.120.92' (ECDSA) to the list of known hosts.
Ubuntu 12.04.2 LTS gitlab ssh-pty

Password: 

Sua saída Connection closed by remote host , no entanto, sugere que seu cliente ssh nunca é realmente capaz de falar com o servidor SSH - o servidor aceita a conexão, mas não responde ao seu cliente ssh .

Também em uma nota relacionada - Connection closed by remote host pode ser um sintoma de um servidor que caiu, pelo menos é a situação normal em que encontro esse erro. Esse não deve ser o caso aqui, porque então eu recebo o mesmo erro.

    
por 17.09.2013 / 23:00