Conexión a github usando la clave SSH generada por PuTTY en Windows 7


20

En una instalación de Windows 7 Enterprise que de otro modo sería impecable:

  1. Instalar PuTTY 0.62
  2. Cree un par de claves pública / privada con puttygen.exe
  3. Agregue la clave pública para pegar en OpenSSH Authorizedkeys a la cuenta de Github
  4. Agregar clave privada al concurso
  5. Instala msysgit 1.7.8 con las siguientes opciones:
    • Use Git desde el símbolo del sistema de Windows
    • Utilice (Tortoise) Plink apuntado para corregir plink.exe
  6. Asegúrese de que la huella digital de github se agregue a know_hosts conectándose a github.com en PuTTY y aceptando la huella digital
  7. Editar ~/.ssh/configpara leer:

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

ssh -vvvT git@github.comda: http://pastebin.com/Tu3Fc6nJ . Tenga en cuenta que se me solicita la frase de contraseña a pesar de que se cargó correctamente en el concurso.

Lo intenté: chmod 700 ~/.ssh; chmod 600 ~/.ssh/*desde Git Bash pero no hubo ningún efecto según lo verificado por ls -l.

Debo señalar que tenía esta configuración exacta trabajando en una instalación anterior de Windows 7. Todo es idéntico por lo que puedo decir.

Lo que sí funciona es generar claves desde Git Bash. Sin embargo, no puedo agregar esas claves en el concurso, lo cual es un gran dolor. En efecto, parece que cualquier intento de usar claves generadas por PuTTY no tiene éxito.

¿Alguna idea de lo que impide que esto funcione según los registros? Gracias por adelantado.


con -vT, por favor, menos nivel de verbosidad
Lazy Badger

Respuestas:


20

Estás confundiendo dos programas completamente separados: PuTTY y OpenSSH.

  • plinky Pageant son parte de PuTTY. El sshcomando es parte de OpenSSH. No está claro qué programa está utilizando Git; necesita verificar la %GIT_SSH%variable de entorno para eso.

  • Los programas usan diferentes protocolos de agente; OpenSSH no puede usar el concurso de PuTTY; tiene el suyo ssh-agent(que desafortunadamente es algo complicado de usar en Windows).

  • PuTTY y plinkalmacene la configuración de la sesión en el registro, editable en la interfaz de PuTTY. No usan nada en ~/.ssh/; OpenSSH solo utiliza este directorio.

  • Los formatos de clave privada utilizados por OpenSSH y PuTTY son diferentes; no puede usar una .ppkclave con OpenSSH. Si generó la clave en PuTTYgen, debe usar su comando "Exportar → 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:'
    

Soy consciente de la diferencia y, como se indica en la publicación original, git se ha configurado para usar plink cuando está instalado. He verificado que esto ha cambiado la variable de entorno adecuada para apuntar a plink.exe. Me gustaría usar las teclas PuTTY (¡y esto ha funcionado en el pasado!) Con git, y el hecho de que no funcione a pesar de que se usa el plink es extraño ...
Radu

Esencialmente, ahora mismo puedo hacer que funcione con las teclas OpenSSH, pero no con las teclas PuTTY. He intentado reinstalar PuTTY y también generar nuevas claves. Eso no parece ser un problema. ¿Alguna idea de que podría ser?
Radu

1
@Radu: plinkno admite el formato de clave OpenSSH. Si su versión lo hace, entonces no plinkestá usando; Es otra cosa.
Grawity

1
@Radu: Además, la publicación original indica lo contrario de su reclamo. Primero genera una clave con PuTTYgen y la carga en el desfile, pero luego continúa con la configuración de OpenSSH y se queja de que " sshsolicita una contraseña a pesar de estar cargada en el desfile". Usted está confundiendo los dos programas.
Grawity

Nunca dije que plink sea compatible con OpenSSH; sin embargo, Git Bash sí, ya que por defecto usa OpenSSH. Leyendo de nuevo, tienes razón, he estado confundiendo cosas ya que, como dijiste, ~/.ssh/configPuTTY no lo usa. Sin embargo, me gustaría reiterar que GIT_SSH apunta a plink y, sin embargo, si modifico el archivo de configuración ssh para OpenSSH, los cambios se reflejan en Git Bash al intentar conectarse a github. Esencialmente, creo que la variable de entorno GIT_SSH está siendo ignorada y supongo que es algo específico de mi sistema operativo. Probaré una nueva imagen mañana.
Radu

20

He reunido una guía paso a paso para obtener la configuración de Git para Windows usando la aplicación Plink de PuTTY para la autenticación SSH.

Sigue a continuación:


Preparar

  1. Instale putty.zip que está disponible en la página de descarga de PuTTY o puede descargarlo individualmente.

    • PuTTY: putty.exe (o por FTP )

      El cliente SSH y Telnet mismo.

    • Plink: plink.exe (o por FTP )

      Una interfaz de línea de comandos para el back-end PuTTY.

    • Concurso: pageant.exe (o por FTP )

      Un agente de autenticación SSH para PuTTY, PSCP, PSFTP y Plink.

    • PuTTYgen: puttygen.exe (o por FTP )

      Una utilidad de generación de claves RSA y DSA.

  2. Generar claves RSA y PPK

    1. Usando el Git Bash, úselo ssh-keygenpara generar un par de claves públicas / privadas RSA. Puede encontrar más información sobre cómo hacer esto en el artículo oficial Generando claves SSH .
    2. En PuTTYgen, importe su ~/.ssh/id_rsaclave (privada) existente , a través de ConversionsImport key.
    3. Guarde la clave importada mediante el Save private keybotón como ~/.ssh/id_rsa.ppk.
    4. Ahora debería tener las siguientes claves en su ~/.sshdirectorio:

      • id_rsa: Clave RSA privada (OpenSSH)
      • id_rsa.pub: Clave RSA pública (OpenSSH)
      • id_rsa.ppk: Clave privada (PuTTY)
  3. Instala Git para Windows .

    Asegúrese de elegir usar Plink.

    Configuración de Git

    Nota: Si ya instaló Git, puede volver a ejecutar el instalador y configurar Plink para que sea su aplicación SSH predeterminada.

  4. Establece tus rutas de entorno.

    1. En el Panel de control , navegue a la vista Sistema.
    2. Elija la configuración avanzada del sistema .
    3. En la ventana Propiedades del sistema , haga clic en la pestaña Avanzado .
    4. Haga clic Environment variables….
    5. Agregue las siguientes variables del sistema (si aún no está configurado):

      • GIT_HOME: C:\Program Files\Git
      • GIT_SSH: C:\Program Files (x86)\PuTTY\plink.exe
    6. Agregue el directorio binario de Git a la ruta del sistema.

      • Path: %Path%;%GIT_HOME%\bin
  5. Abra el concurso y cargue la clave ppk ubicada en ~/.ssh/id_rsa.ppk.

    Nota: Una vez que el concurso ha comenzado, puede hacer clic en su icono en la bandeja del sistema ubicada en la barra de tareas, al lado de la hora, a la derecha.

  6. Abra Putty y conéctese para probar su conexión a través de SSH y agregue la clave del servidor como un host conocido.

    Masilla

    Ejemplos de nombres de host:

    • GitHub: git@github.com:22 (o a través de ssh-agent ssh -Tv git@github.com)
    • BitBucket: git@bitbucket.org:22 (o a través de ssh-agent ssh -Tv git@bitbucket.org)
  7. Inicia Git Bash.

    Debería poder empujar y extraer desde su host remoto sin ingresar una contraseña cada vez.


Atajo

Puede colocar un acceso directo en su directorio de inicio para cargar automáticamente su clave cada vez que inicie sesión en su cuenta de Windows.

Via Batch Script

Esta idea fue inspirada por una respuesta a esta pregunta:

Superusuario: ¿Cómo hacer un acceso directo desde 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

Vía el Explorador de Windows

  1. Navegue al directorio de inicio en el Explorador de Windows.

    • El Startup/directorio de usuarios (preferido) se encuentra en:

      %AppData%\Microsoft\Windows\Start Menu\Programs\Startup
      
    • El Startup/directorio de todos los usuarios se encuentra en:

      %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
      
  2. Haga clic derecho dentro de la carpeta y seleccione NewShortcut

  3. En el cuadro de diálogo Crear acceso directo , ingrese la siguiente información.

    • Ubicación: "C:\Program Files (x86)\PuTTY\pageant.exe"
    • Nombre: Pageant Autoload
  4. Haga clic con el botón derecho en el nuevo acceso directo y elija Propertiesdel menú contextual.

  5. Modifique los siguientes campos en la pestaña Acceso directo :

    • Objetivo: "%PROGRAMFILES(x86)%\PuTTY\pageant.exe" id_rsa.ppk
    • Empezar en: %USERPROFILE%\.ssh

     
    Notas:

    1. Si está utilizando un sistema operativo Windows de 32 bits, debe usar la %PROGRAMFILES%variable de entorno en lugar de %PROGRAMFILES(x86)%.

    2. Si colocó su acceso directo en el directorio de inicio Todos los usuarios, asegúrese de que el usuario actual tenga una id_rsa.ppkclave en su ~/.sshdirectorio o la clave no se cargará automáticamente.


Palabras de clausura

Ahí tienes. La próxima vez que inicie sesión en su perfil de Windows, se le solicitará que ingrese la contraseña de su clave. Si no configuró una contraseña en su clave, entonces su clave debería cargarse automáticamente sin un aviso.

Si no está seguro de si su clave cargada, vea las claves actuales en el concurso seleccionando Ver claves en el menú contextual del concurso en la bandeja del sistema.


3
Grandes instrucciones detalladas! +1 de mi parte!
Pimp Juice IT

Importar la clave privada en puttygen era mi eslabón perdido
Saurabh Kumar

Tuve que crear una conexión en Putty para habilitar el paso en el proceso de configuración desde la imagen.
user46193

¡Fantástico! Tuve un problema similar con gitlab.com y esto lo resolvió. Git estaba usando masilla, mientras que la clave que había subido era OpenSSH. ¡Gracias!
jgalak

4

En inglés simple

debug3: no es un archivo de clave RSA1 /c/Users/Radu/\.ssh\github.ppk.

debug2: key_type_from_name: tipo de clave desconocido 'PuTTY-User-Key-File-2

Puttygen puede construir diferentes claves, Github quiere SSH1-RSA (?, Uso claves ssh2 con Pageant en github)

Agrega

Consulte también esta publicación sobre la depuración de problemas de concurso con 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 es obsoleto y tiene numerosos agujeros de seguridad. Github no lo usa.
Grawity

Este equivalente a 'ssh -T git@github.com' lamentablemente falta en la documentación de instrucciones de github. Gracias por tu publicación.
Epu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.