Copier la clé ssh sur une autre machine pour pouvoir y utiliser GitHub?

12

J'ai un serveur distant. Je peux déjà ssh avec succès sur ce serveur distant - ma clé est authorized_keyssur le serveur distant.

Maintenant, je veux tirer de GitHub directement sur ce serveur distant. Mais je reçois permission denied (publickey)quand j'essaie ssh -T [email protected]sur le serveur distant.

Dois-je copier id_rsa.pubdirectement depuis ma machine locale sur le serveur distant, ou est-ce dangereux?

Si telle est la réponse, quelle est la meilleure façon de procéder?

Ou dois-je générer une nouvelle clé publique sur le serveur distant et l'ajouter à mon compte github?

MISE À JOUR:

Voici la sortie d'un ssh verbeux:

~$ 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
la source
Je viens d'essayer de configurer le transfert d'agent ssh, en utilisant l'adresse IP de mon serveur: developer.github.com/guides/using-ssh-agent-forwarding Mais j'obtiens toujours Permission denied (publickey)sur la machine distante.
Richard
1
il y a une option détaillée sur la commande ssh, je pense que cela pourrait vous dire quels fichiers clés il essaie réellement, cela m'a aidé plusieurs fois.
Allman

Réponses:

4

le id_rsa.pubpeut être copié n'importe où sans aucun danger réel pour lui. Ceci est votre clé publique et est destiné à des choses comme celle-ci. Il s'agit de la moitié d'une paire de clés, et le partager avec les endroits auxquels vous souhaitez accéder est la façon dont vous autorisez la clé privée à fonctionner.

Pour permettre la connexion à distance, votre clé publique doit être répertoriée dans authorized_keys( authorized_keys2sur certains systèmes). Une clé sur chaque ligne, dans ce format:

ssh-rsa AAAIHAVEREMOVEDTHEMAJORITYOFTHEKEYBECAUSEISEENONEEDTOPOSTTHATWALLOFTEXTHERE9yfRjxw== jarmund@jarmint

Pour ce faire, une fois que vous l'avez copié, ajoutez-le simplement au authorized_keysfichier comme ceci:cat id_rsa.pub >> ~/.ssh/authorized_keys

La plupart des systèmes sensés refuseront lâchement de vous autoriser à utiliser la connexion par clé si le .sshdossier a des autorisations trop lâches. Le dossier devrait l'être 700, donc si vous rencontrez toujours des problèmes:chmod 700 ~/.ssh

De plus, les fichiers dans le .sshdossier doivent être 600:chmod 600 ~/.ssh


Modifier 1:

Le fichier lui-même id_rsa.pubn'est pas requis lui-même sur le serveur distant. Seul le contenu, dans le cadre de authorized_keys. Je recommande d'exécuter ssh -vT [email protected]pour activer la journalisation détaillée, afin que vous puissiez voir exactement de quelles autorisations il se plaint.

Modifier 2:

Cela signifie qu'aucune des clés proposées ne correspond à ce que le serveur distant a dans le fichier. Ce que vous voulez voir, c'est quelque chose comme ceci:

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

A vérifier:

  • Assurez-vous que l'une des clés privées est celle qui correspond à la clé publique que vous avez ajoutée à la télécommande authorized_keys
  • Assurez-vous que la clé correspond au nom d'utilisateur avec lequel vous essayez de vous connecter (devrait être la dernière partie de la clé publique)
  • Essayez renommage authorized_keysàauthorized_keys2
Jarmund
la source
Merci. Ma clé publique est répertoriée ~/.ssh/authorized_keyssur le serveur distant - je l'ai ajoutée à l'aide cat ~/.ssh/id_rsa.pub | ssh me@server "cat >> ~/.ssh/authorized_keys". Puis sshed à la télécommande et a couru ~$ chmod 700 ~/.ssh et $ chmod 600 ~/.ssh/authorized_keysmais toujours Permission denied (publickey)quand j'essaie de ssh à github. Dois-je également copier le id_rsa.pubfichier entier sur la machine distante?
Richard
@Richard Vous n'avez pas besoin du fichier lui-même, non. Bien que j'aime le conserver dans le dossier .ssh au cas où j'en aurais besoin. Mais ce n'est pas obligatoire, c'est juste quelque chose que je fais. Je recommanderais d'exécuter la sshcommande décrite dans votre question avec le -vcommutateur pour voir exactement les autorisations dont se plaint ssh.
Jarmund
Merci pour l'édition 2. Je ne sais pas comment faire la première puce - check that one of the private keys...- que dois-je faire ici?
Richard
Au point 2, voulez-vous dire que la clé doit correspondre à mon nom d'utilisateur GitHub? Ça ne ressemble à rien :)
Richard
Le fait est que je peux utiliser cette même clé publique pour ssh et extraire de GitHub de ma machine locale très bien, donc GitHub doit penser que ça va ...?
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

Selon votre trace de débogage, aucun de ces fichiers de clés n'existe réellement sur le système local, et ssh n'a en fait offert aucune clé au serveur distant. Assurez-vous que la clé que vous souhaitez utiliser existe réellement sur l'hôte sur lequel vous exécutez ssh et que le fichier a le bon nom. Si vous souhaitez utiliser un fichier de clé autre que l'un des fichiers par défaut, vous devez le spécifier sur la ligne de commande ssh:

ssh -i /path/to/some_key -Tv [email protected]
Kenster
la source
Le fichier de clé n'existe pas sur le serveur distant à partir duquel j'essaie de ssh vers github, mais il se trouve authorized_keys. Est-ce suffisant ou dois-je également copier le fichier de clé là-bas?
Richard
1
authorized_keysest pour les clés publiques qui seront acceptées pour les connexions entrantes . Vous avez besoin d'une copie du fichier de clé privée pour établir une connexion sortante avec un autre hôte. Alors oui, l'un de ces fichiers clés (id_rsa, etc.) doit être présent sur l'hôte sur lequel vous exécutez ssh.
Kenster
Le drapeau -i m'a aidé à résoudre un problème! J'ai copié le dossier ssh sur un autre ordinateur et j'essayais d'utiliser git distant, mais j'ai été rejeté. Le -i a sauvé la mise!
pauljohn32
2

Le serveur a besoin de votre clé privée pour s'authentifier auprès de Github. Votre clé publique, comme son nom l'indique, est considérée comme publique, elle ne peut donc pas être suffisante pour s'authentifier.

Si vous n'avez pas besoin d'utiliser Github sur le serveur distant sans vous être connecté via ssh, vous devez utiliser le transfert d'agent ssh. Un guide pour cela est disponible sur Github: https://developer.github.com/guides/using-ssh-agent-forwarding/ .

Sinon, vous devez générer une nouvelle clé et la lier à votre compte.

user2313067
la source
0

Vous pouvez directement mettre la commande.

$ cat ~ / .ssh / id_rsa.pub

si vous avez déjà la clé ssh, elle l'affichera. Sinon, cela donne une erreur. Vous devez ajouter une nouvelle clé.

Gauravsingh Patil
la source