Connexion à github à l'aide de la clé SSH générée par PuTTY dans Windows 7


20

Sur une installation Windows 7 Entreprise par ailleurs vierge:

  1. Installer PuTTY 0.62
  2. Créer une paire de clés publique / privée avec puttygen.exe
  3. Ajouter une clé publique à coller dans OpenSSH authorized_keys au compte github
  4. Ajouter une clé privée au concours
  5. Installez msysgit 1.7.8 avec les options suivantes:
    • Utiliser Git à partir de l'invite de commandes Windows
    • Utilisez (Tortoise) Plink pointé pour corriger plink.exe
  6. Assurez-vous que l'empreinte digitale github est ajoutée à know_hosts en vous connectant à github.com dans PuTTY et en acceptant l'empreinte digitale
  7. Modifier ~/.ssh/configpour lire:

    Host github.com
        User git
        Hostname github.com
        PreferredAuthentications publickey
        IdentityFile ~\.ssh\github.ppk
    

ssh -vvvT git@github.comdonne: http://pastebin.com/Tu3Fc6nJ . Notez que je suis invité à saisir la phrase de passe malgré son chargement réussi dans le concours.

J'ai essayé: chmod 700 ~/.ssh; chmod 600 ~/.ssh/*depuis Git Bash mais il n'y a eu aucun effet tel que vérifié par ls -l.

Je dois noter que cette configuration exacte fonctionnait sur une installation précédente de Windows 7. Pour autant que je sache, tout est identique.

Ce qui fonctionne, c'est la génération de clés depuis Git Bash. Cependant, je ne peux pas ajouter ces clés dans le concours, ce qui est une énorme douleur. En effet, il semble que toute tentative d'utilisation de clés générées par PuTTY soit infructueuse.

Avez-vous une idée de ce qui empêche cela de fonctionner sur la base des journaux? Merci d'avance.


avec -vT, s'il vous plaît, moins de niveau de verbosité
Lazy Badger

Réponses:


20

Vous confondez deux programmes entièrement distincts: PuTTY et OpenSSH.

  • plinket Pageant font partie de PuTTY. La sshcommande fait partie d'OpenSSH. On ne sait pas quel programme est utilisé par Git; vous devez vérifier la %GIT_SSH%variable d'environnement pour cela.

  • Les programmes utilisent différents protocoles d'agent; OpenSSH ne peut pas utiliser le concours de PuTTY; il a le sien ssh-agent(qui est malheureusement un peu compliqué à utiliser sous Windows).

  • PuTTY et plinkstockez les paramètres de session dans le registre, modifiables dans l'interface de PuTTY. Ils n'utilisent rien dans ~/.ssh/; ce répertoire n'est utilisé que par OpenSSH.

  • Les formats de clé privée utilisés par OpenSSH et PuTTY sont différents; vous ne pouvez pas utiliser de .ppkclé avec OpenSSH. Si vous avez généré la clé dans PuTTYgen, vous devez utiliser sa commande "Exporter → OpenSSH".

    $ ssh -vvvT git@github.com
    OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
    ...
    debug2: key_type_from_name: unknown key type 'PuTTY-User-Key-File-2:'
    

Je suis conscient de la différence et comme indiqué dans le message d'origine, git a été configuré pour utiliser plink lors de l'installation. J'ai vérifié que cela a changé la variable d'environnement appropriée pour pointer vers plink.exe. J'aimerais utiliser des clés PuTTY (et cela a fonctionné dans le passé!) Avec git, et le fait que cela ne fonctionne pas malgré l'utilisation du plink est bizarre ...
Radu

Essentiellement, en ce moment, je peux le faire fonctionner avec des clés OpenSSH, mais pas avec des clés PuTTY. J'ai essayé de réinstaller PuTTY et de générer également de nouvelles clés. Ce qui ne semble pas poser problème. Avez-vous des idées de ce que ça pourrait être?
Radu

1
@Radu: plinkne prend pas en charge le format de clé OpenSSH. Si votre version le fait, ce n'est pas que plinkvous l'utilisez; c'est autre chose.
grawity

1
@Radu: En outre, le message d'origine indique le contraire de votre réclamation. D' abord , vous générez une clé avec PuTTYgen et de le charger à Pageant, mais alors vous allez avec la configuration OpenSSH et plaignez que « sshinvites pour la phrase de passe en dépit d' être chargé dans Pageant ». Vous êtes confondre les deux programmes.
grawity

Je n'ai jamais dit que plink supporte OpenSSH - Git Bash, cependant, le fait, car par défaut il utilise OpenSSH. En relisant, vous avez raison, j'ai confondu les choses puisque, comme vous l'avez dit, ~/.ssh/confign'est pas utilisé par PuTTY. Cependant, je voudrais réitérer que GIT_SSH est pointé vers le lien, et pourtant si je modifie le fichier de configuration ssh pour OpenSSH, les changements sont reflétés dans Git Bash lors de la tentative de connexion à github. Essentiellement, je crois que la variable d'environnement GIT_SSH est ignorée et je suppose que c'est quelque chose de spécifique à mon système d'exploitation. Je vais essayer une nouvelle image demain.
Radu

20

J'ai préparé un guide étape par étape pour obtenir la configuration de Git pour Windows en utilisant l'application Plink de PuTTY pour l'authentification SSH.

Suivez ci-dessous:


Installer

  1. Installez putty.zip qui est disponible sur la page de téléchargement de PuTTY ou vous pouvez télécharger individuellement.

    • PuTTY: putty.exe (ou par FTP )

      Le client SSH et Telnet lui-même.

    • Plink: plink.exe (ou par FTP )

      Une interface de ligne de commande vers les backends PuTTY.

    • Reconstitution historique: pageant.exe (ou par FTP )

      Un agent d'authentification SSH pour PuTTY, PSCP, PSFTP et Plink.

    • PuTTYgen: puttygen.exe (ou par FTP )

      Un utilitaire de génération de clés RSA et DSA.

  2. Générer des clés RSA et PPK

    1. À l'aide de Git Bash, utilisez ssh-keygenpour générer une paire de clés publiques / privées RSA. Plus d'informations sur la façon de procéder peuvent être trouvées sur le site officiel Génération de clés SSH .
    2. Dans PuTTYgen, importez votre ~/.ssh/id_rsaclé (privée) existante , via ConversionsImport key .
    3. Enregistrez la clé importée via le Save private keybouton sous~/.ssh/id_rsa.ppk .
    4. Vous devriez maintenant avoir les clés suivantes dans votre ~/.sshrépertoire:

      • id_rsa: Clé RSA privée (OpenSSH)
      • id_rsa.pub: Clé RSA publique (OpenSSH)
      • id_rsa.ppk: Clé privée (PuTTY)
  3. Installez Git pour Windows .

    Assurez-vous que vous choisissez d'utiliser Plink.

    Configuration de Git

    Remarque: Si vous avez déjà installé Git, vous pouvez simplement réexécuter le programme d'installation et définir Plink pour être votre application SSH par défaut.

  4. Définissez vos chemins d'environnement.

    1. Dans le panneau de configuration , accédez à la vue Système.
    2. Choisissez Paramètres système avancés .
    3. Dans la fenêtre Propriétés système , cliquez sur Avancé onglet .
    4. Cliquez sur Environment variables… .
    5. Ajoutez les variables système suivantes (si elles ne sont pas déjà définies):

      • GIT_HOME: C:\Program Files\Git
      • GIT_SSH: C:\Program Files (x86)\PuTTY\plink.exe
    6. Ajoutez le répertoire binaire Git au chemin système.

      • Path: %Path%;%GIT_HOME%\bin
  5. Ouvrez Pageant et chargez la clé ppk située dans ~/.ssh/id_rsa.ppk .

    Remarque: Une fois Pageant lancé, vous pouvez cliquer sur son icône dans la barre d'état système située dans la barre des tâches, à côté de l'heure, à droite.

  6. Ouvrez Putty et connectez-vous pour tester votre connexion via SSH et ajouter la clé du serveur en tant qu'hôte connu.

    Mastic

    Exemples de noms d'hôtes:

    • GitHub: git@github.com:22 (ou via ssh-agent ssh -Tv git@github.com)
    • BitBucket: git@bitbucket.org:22 (ou via ssh-agent ssh -Tv git@bitbucket.org)
  7. Démarrez Git Bash.

    Vous devriez pouvoir pousser et tirer depuis votre hôte distant sans entrer de mot de passe à chaque fois.


Raccourci

Vous pouvez placer un raccourci dans votre répertoire de démarrage pour charger automatiquement votre clé chaque fois que vous vous connectez à votre compte Windows.

Via le script par lots

Cette idée a été inspirée par une réponse à cette question:

Super utilisateur: comment créer un raccourci à partir de CMD? .

REM |==================================================================|
REM | Pageant Autoload.bat                                             |
REM |                                                                  |
REM | This script creates a shortcut for auto-loading a PPK (key) in   |
REM | Pageant by writing a temporary VB script and executing it. The   |
REM | following information below is added to the shortcut.            |
REM |                                                                  |
REM | Filename  : Pageant Autoload                                     |
REM | Target    : pageant.exe                                          |
REM | Arguments : id_rsa.ppk                                           |
REM | Start in  : ~/.ssh                                               |
REM |==================================================================|
@echo off

REM |==================================================================|
REM | Global Values - Do not touch these!                              |
REM |==================================================================|
SET VBSCRIPT="%TEMP%\%RANDOM%-%RANDOM%-%RANDOM%-%RANDOM%.vbs"
SET STARTUP_DIR=Microsoft\Windows\Start Menu\Programs\Startup
SET STARTUP_USER_DIR=%APPDATA%\%STARTUP_DIR%
SET STARTUP_ALL_USERS_DIR=%PROGRAMDATA%\%STARTUP_DIR% REM Alternative

REM |==================================================================|
REM | Shortcut Values - You can change these to whatever you want.     |
REM |==================================================================|
SET FILENAME=Pageant Autoload.lnk
SET TARGET=%PROGRAMFILES(x86)%\PuTTY\pageant.exe
SET ARGUMENTS=id_rsa.ppk
SET START_IN=%%USERPROFILE%%\.ssh
SET DESCRIPTION=Autoload PuTTY key with Pageant on startup (Ctrl+Alt+S)
SET HOTKEY=CTRL+ALT+S

REM |==================================================================|
REM | Write a new VB script, on the fly; execute and delete it.        |
REM |==================================================================|
ECHO Set oWS = WScript.CreateObject("WScript.Shell") >> %VBSCRIPT%
ECHO sLinkFile = "%STARTUP_USER_DIR%\%FILENAME%" >> %VBSCRIPT%
ECHO Set oLink = oWS.CreateShortcut(sLinkFile) >> %VBSCRIPT%
ECHO oLink.TargetPath = "%TARGET%" >> %VBSCRIPT%
ECHO oLink.Arguments = "%ARGUMENTS%" >> %VBSCRIPT%
ECHO oLink.WorkingDirectory = "%START_IN%" >> %VBSCRIPT%
ECHO oLink.Description = "%DESCRIPTION%"  >> %VBSCRIPT%
ECHO oLink.HotKey = "%HOTKEY%" >> %VBSCRIPT%
ECHO oLink.Save >> %VBSCRIPT%
CScript //Nologo %VBSCRIPT%
DEL %VBSCRIPT% /f /q

Via l'explorateur Windows

  1. Accédez au répertoire de démarrage dans l'Explorateur Windows.

    • Le Startup/répertoire utilisateur (préféré) est situé à:

      %AppData%\Microsoft\Windows\Start Menu\Programs\Startup
      
    • Le Startup/répertoire de tous les utilisateurs est situé à:

      %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
      
  2. Faites un clic droit à l'intérieur du dossier et sélectionnez NewShortcut

  3. Dans la boîte de dialogue Créer un raccourci , entrez les informations suivantes.

    • Emplacement: "C:\Program Files (x86)\PuTTY\pageant.exe"
    • Nom: Pageant Autoload
  4. Cliquez avec le bouton droit sur le nouveau raccourci et choisissez Propertiesdans le menu contextuel.

  5. Modifiez les champs suivants sous l' onglet Raccourci :

    • Cible: "%PROGRAMFILES(x86)%\PuTTY\pageant.exe" id_rsa.ppk
    • Commencer dans: %USERPROFILE%\.ssh

     
    Remarques:

    1. Si vous utilisez un système d'exploitation Windows 32 bits, vous devez utiliser la %PROGRAMFILES%variable d'environnement à la place de %PROGRAMFILES(x86)%.

    2. Si vous avez placé votre raccourci dans le répertoire de démarrage Tous les utilisateurs, assurez-vous que l'utilisateur actuel possède une id_rsa.ppkclé dans son ~/.sshrépertoire ou la clé ne se chargera pas automatiquement.


Remarques de clôture

Voilà. La prochaine fois que vous vous connecterez à votre profil Windows, vous serez accueilli par une invite Pageant pour entrer le mot de passe de votre clé. Si vous n'avez pas défini de mot de passe sur votre clé, votre clé doit être chargée automatiquement sans invite.

Si vous n'êtes pas sûr que votre clé soit chargée, affichez les clés actuelles dans Pageant en sélectionnant Afficher les clés dans le menu contextuel de Pageant dans la barre d'état système.


3
Grandes instructions détaillées! +1 de moi!
Pimp Juice IT

L'importation de la clé privée dans puttygen était mon lien manquant
Saurabh Kumar

J'ai dû créer une connexion dans Putty pour activer l'étape du processus de configuration à partir de l'image.
user46193

Fantastique! J'ai eu un problème similaire avec gitlab.com et cela l'a résolu. Git utilisait du mastic alors que la clé que j'avais téléchargée était celle d'OpenSSH. Je vous remercie!
jgalak

4

En anglais simple

debug3: Pas un fichier de clé RSA1 /c/Users/Radu/\.ssh\github.ppk.

debug2: key_type_from_name: type de clé inconnu 'PuTTY-User-Key-File-2

Puttygen peut construire des clés différentes, Github veut SSH1 RSA (?, Je utilisation des clés SSH2 avec reconstitution historique sur github)

Ajouts

Voir aussi ce post sur le débogage des problèmes de concours avec Github

>plink.exe -v -agent git@github.com
Looking up host "github.com"
Connecting to 207.97.227.239 port 22
Server version: SSH-2.0-OpenSSH_5.1p1 Debian-5github2
Using SSH protocol version 2
We claim version: SSH-2.0-PuTTY_Release_0.62
Doing Diffie-Hellman group exchange
Doing Diffie-Hellman key exchange with hash SHA-256
Host key fingerprint is:
ssh-rsa 2048 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Pageant is running. Requesting keys.
Pageant has 1 SSH-2 keys
Using username "git".
Trying Pageant key #0
Remote debug message: Forced command: gerve lazybadger
Remote debug message: Port forwarding disabled.
Remote debug message: X11 forwarding disabled.
Remote debug message: Agent forwarding disabled.
Remote debug message: Pty allocation disabled.
Authenticating with public key "github/lazybadger" from agent
Sending Pageant's response
Remote debug message: Forced command: gerve lazybadger
Remote debug message: Port forwarding disabled.
Remote debug message: X11 forwarding disabled.
Remote debug message: Agent forwarding disabled.
Remote debug message: Pty allocation disabled.
Access granted
Opened channel for session
Server refused to allocate pty
Started a shell/command
Hi lazybadger! You've successfully authenticated, but GitHub does not provide shell access.
Server sent command exit status 1
Disconnected: All channels closed

SSH1 est obsolète et comporte de nombreuses failles de sécurité. Github ne l'utilise pas.
grawity

Cet équivalent de «ssh -T git@github.com» est malheureusement absent de la documentation du guide de github. Merci d'avoir posté.
Epu
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.