Copie a chave ssh para outra máquina para que eu possa usar o GitHub lá?

12

Eu tenho um servidor remoto. Eu já posso ssh com sucesso nesse servidor remoto - minha chave está no authorized_keysservidor remoto.

Agora eu quero extrair do GitHub diretamente para esse servidor remoto. Mas estou recebendo permission denied (publickey)quando tento ssh -T [email protected]no servidor remoto.

Devo copiar id_rsa.pubdiretamente da minha máquina local para o servidor remoto ou isso é perigoso?

Se essa é a resposta, qual é a melhor maneira de fazer isso?

Ou devo gerar uma nova chave pública no servidor remoto e adicioná-la à minha conta do github?

ATUALIZAR:

Aqui está a saída de um ssh detalhado:

~$ ssh -Tv [email protected]
OpenSSH_6.0p1 Debian-4+deb7u2, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to github.com [192.30.252.131] port 22.
debug1: Connection established.
debug1: identity file /home/richard/.ssh/id_rsa type -1
debug1: identity file /home/richard/.ssh/id_rsa-cert type -1
debug1: identity file /home/richard/.ssh/id_dsa type -1
debug1: identity file /home/richard/.ssh/id_dsa-cert type -1
debug1: identity file /home/richard/.ssh/id_ecdsa type -1
debug1: identity file /home/richard/.ssh/id_ecdsa-cert type -1
debug1: Remote protocol version 2.0, remote software version libssh-0.6.0
debug1: no match: libssh-0.6.0
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.0p1 Debian-4+deb7u2
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-sha1 none
debug1: kex: client->server aes128-ctr hmac-sha1 none
debug1: sending SSH2_MSG_KEX_ECDH_INIT
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: RSA 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
debug1: Host 'github.com' is known and matches the RSA host key.
debug1: Found key in /home/richard/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/richard/.ssh/id_rsa
debug1: Trying private key: /home/richard/.ssh/id_dsa
debug1: Trying private key: /home/richard/.ssh/id_ecdsa
debug1: No more authentication
Richard
fonte
Eu apenas tentei configurar o encaminhamento de agente ssh, usando o endereço IP do meu servidor: developer.github.com/guides/using-ssh-agent-forwarding Mas ainda estou acessando Permission denied (publickey)a máquina remota.
Richard
1
existe uma opção detalhada no comando ssh, acho que isso pode lhe dizer quais arquivos-chave ele está realmente tentando, me ajudou algumas vezes.
Allman

Respostas:

4

o id_rsa.pubpode ser copiado em qualquer lugar sem nenhum perigo real. Esta é a sua chave pública e destina-se a coisas como esta. É metade do par de chaves, e compartilhá-lo com os lugares aos quais você deseja acessar é como você permite que a chave privada funcione.

Para permitir o login remoto, sua chave pública precisa estar listada em authorized_keys( authorized_keys2em alguns sistemas). Uma chave em cada linha, neste formato:

ssh-rsa AAAIHAVEREMOVEDTHEMAJORITYOFTHEKEYBECAUSEISEENONEEDTOPOSTTHATWALLOFTEXTHERE9yfRjxw== jarmund@jarmint

Para conseguir isso, depois de copiá-lo, basta anexá-lo ao authorized_keysarquivo assim:cat id_rsa.pub >> ~/.ssh/authorized_keys

A maioria dos sistemas sãos se recusará covardemente a permitir que você use o logon baseado em chave se a .sshpasta tiver permissões muito frouxas. A pasta deve estar 700, portanto, se você ainda estiver tendo problemas:chmod 700 ~/.ssh

Além disso, os arquivos na .sshpasta devem ser 600:chmod 600 ~/.ssh


Editar 1:

O arquivo em si id_rsa.pubnão é necessário no servidor remoto. Somente o conteúdo, como parte de authorized_keys. Eu recomendo executar ssh -vT [email protected]para habilitar o log detalhado, para que você possa ver exatamente de quais permissões ele reclama.

Edição 2:

Isso significa que nenhuma das chaves oferecidas corresponde ao que o servidor remoto possui no arquivo. O que você quer ver é algo como isto:

debug1: Offering RSA public key: /home/jarmund/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 535

Coisas a verificar:

  • Verifique se uma das chaves privadas é a que corresponde à chave pública que você adicionou ao controle remoto authorized_keys
  • Verifique se a chave corresponde ao nome de usuário com o qual você está tentando fazer login (deve ser a última parte da chave pública)
  • Tente renomear authorized_keysparaauthorized_keys2
Jarmund
fonte
Obrigado. Minha chave pública está listada no ~/.ssh/authorized_keysservidor remoto - eu a adicionei usando cat ~/.ssh/id_rsa.pub | ssh me@server "cat >> ~/.ssh/authorized_keys". Então sshed para o controle remoto e correu ~$ chmod 700 ~/.ssh e $ chmod 600 ~/.ssh/authorized_keysmas ainda obter Permission denied (publickey)quando tento ssh para github. Também devo copiar todo o id_rsa.pubarquivo para a máquina remota?
Richard
@ Richard Você não precisa do arquivo em si, não. Embora eu goste de mantê-lo na pasta .ssh, caso precise. Mas não é necessário, é apenas algo que faço. Eu recomendaria executar o sshcomando descrito em sua pergunta com a -vopção para ver exatamente de quais permissões o ssh está reclamando.
Jarmund 22/04
Obrigado pela edição 2. Não tenho certeza de como fazer o primeiro ponto check that one of the private keys...- o que devo fazer aqui?
Richard
No ponto 2, você quer dizer que a chave deve corresponder ao meu nome de usuário do GitHub? Ele não parece nada com ele :)
Richard
O problema é que posso usar essa mesma chave pública para ssh e extrair do GitHub da minha máquina local, então o GitHub deve achar que está tudo bem ...?
Richard
2
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/richard/.ssh/id_rsa
debug1: Trying private key: /home/richard/.ssh/id_dsa
debug1: Trying private key: /home/richard/.ssh/id_ecdsa
debug1: No more authentication

De acordo com o rastreamento de depuração, nenhum desses arquivos de chave realmente existe no sistema local e o ssh não ofereceu nenhuma chave ao servidor remoto. Verifique se a chave que você deseja usar realmente existe no host em que você está executando o ssh e se o arquivo tem o nome correto. Se você quiser usar um arquivo de chave que não seja um dos arquivos padrão, precisará especificá-lo na linha de comando ssh:

ssh -i /path/to/some_key -Tv [email protected]
Kenster
fonte
O arquivo de chave não existe no servidor remoto a partir do qual estou tentando fazer o ssh no github, mas está authorized_keys. Isso é suficiente ou eu preciso copiar o arquivo de chave por lá também?
Richard
1
authorized_keysé para chaves públicas que serão aceitas para conexões de entrada . Você precisa de uma cópia do arquivo de chave privada para fazer uma conexão de saída com outro host. Então, sim, um desses arquivos principais (id_rsa, etc.) deve estar presente no host em que você está executando o ssh.
Kenster
A bandeira -i me ajudou a resolver um problema! Copiei a pasta ssh para outro computador e estava tentando usar o git remoto, mas fui rejeitada. O -i salvou o dia!
pauljohn32
2

O servidor precisa da sua chave privada para se autenticar no Github. Sua chave pública, como o próprio nome sugere, é considerada pública, portanto, não pode ser suficiente para autenticar.

Se você não precisar usar o Github no servidor remoto sem ter se conectado através do ssh, use o encaminhamento do ssh-agent. Um guia para isso está disponível no Github: https://developer.github.com/guides/using-ssh-agent-forwarding/ .

Caso contrário, você deve gerar uma nova chave e vinculá-la à sua conta.

user2313067
fonte
0

Você pode colocar o comando diretamente.

$ cat ~ / .ssh / id_rsa.pub

se você já possui a chave ssh, ela será exibida. Caso contrário, dá erro. Você precisa adicionar uma nova chave.

Gauravsingh Patil
fonte