Connessione a github utilizzando la chiave SSH generata da PuTTY in Windows 7


20

Su un'installazione Windows 7 Enterprise altrimenti incontaminata:

  1. Installa PuTTY 0.62
  2. Crea una coppia di chiavi pubblica / privata con puttygen.exe
  3. Aggiungi la chiave pubblica per incollare in OpenSSH authorized_keys all'account github
  4. Aggiungi chiave privata al concorso
  5. Installa msysgit 1.7.8 con le seguenti opzioni:
    • Usa Git dal prompt dei comandi di Windows
    • Usa (Tartaruga) Plink indicato per correggere plink.exe
  6. Assicurati che l'impronta digitale di github sia aggiunta a know_hosts collegandosi a github.com in PuTTY e accettando l'impronta digitale
  7. Modifica ~/.ssh/configper leggere:

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

ssh -vvvT git@github.comdà: http://pastebin.com/Tu3Fc6nJ . Nota che mi viene richiesta la passphrase nonostante sia stata caricata correttamente nel concorso.

Ci ho provato: chmod 700 ~/.ssh; chmod 600 ~/.ssh/*dall'interno di Git Bash ma non ci sono stati effetti verificati da ls -l.

Dovrei notare che ho avuto questa configurazione esatta lavorando su una precedente installazione di Windows 7. Tutto è identico per quanto posso dire.

Ciò che funziona è generare chiavi da Git Bash. Tuttavia, non posso aggiungere quelle chiavi in ​​concorso, il che è un dolore enorme. In effetti, sembra che qualsiasi tentativo di usare le chiavi generate da PuTTY non abbia successo.

Qualche idea su cosa impedisce che funzioni in base ai registri? Grazie in anticipo.


con -vT, per favore, livello di verbosità minore
Lazy Badger

Risposte:


20

Stai confondendo due programmi completamente separati: PuTTY e OpenSSH.

  • plinke Pageant fanno parte di PuTTY. Il sshcomando fa parte di OpenSSH. Non è chiaro quale programma sia utilizzato da Git; è necessario controllare la %GIT_SSH%variabile di ambiente per quello.

  • I programmi utilizzano protocolli di agente diversi; OpenSSH non può usare il concorso di PuTTY; ha il suo ssh-agent(che purtroppo è un po 'complicato da usare su Windows).

  • PuTTY e plinkmemorizzare le impostazioni della sessione nel registro, modificabili nell'interfaccia di PuTTY. Non usano nulla dentro ~/.ssh/; questa directory è utilizzata solo da OpenSSH.

  • I formati di chiave privata utilizzati da OpenSSH e PuTTY sono diversi; non è possibile utilizzare una .ppkchiave con OpenSSH. Se hai generato la chiave in PuTTYgen, devi usare il suo comando "Esporta → 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:'
    

Sono consapevole della differenza e, come indicato nel post originale, git è stato impostato per utilizzare plink quando installato. Ho verificato che questo ha cambiato la variabile d'ambiente corretta per puntare a plink.exe. Mi piacerebbe usare i tasti PuTTY (e questo ha funzionato in passato!) Con git, e il fatto che non funzioni nonostante sia usato il plink è strano ...
Radu,

In sostanza, in questo momento posso farlo funzionare con i tasti OpenSSH, ma non con i tasti PuTTY. Ho provato a reinstallare PuTTY e anche a generare nuove chiavi. TThat non sembra essere un problema. Qualche idea di cosa potrebbe essere?
Radu,

1
@Radu: plinknon supporta il formato chiave OpenSSH. Se la tua versione lo fa, allora non plinkstai usando; è qualcos'altro.
Grawity,

1
@Radu: inoltre, il post originale indica l'opposto del tuo reclamo. Per prima cosa generi una chiave con PuTTYgen e la carichi su Pageant, ma poi vai con la configurazione di OpenSSH e ti lamenti che " sshrichiede una passphrase nonostante sia caricato in Pageant". Si sta confondendo i due programmi.
Grawity il

Non ho mai detto che Plink supporti OpenSSH, tuttavia Git Bash lo fa, poiché di default usa OpenSSH. Rileggendo, hai ragione, ho confuso le cose poiché, come hai detto, ~/.ssh/confignon è usato da PuTTY. Tuttavia, vorrei ribadire che GIT_SSH è indicato per plink, e tuttavia se modifico il file di configurazione ssh per OpenSSH le modifiche si riflettono in Git Bash quando provo a connettermi a github. In sostanza, credo che la variabile d'ambiente GIT_SSH venga ignorata e suppongo sia qualcosa di specifico per il mio sistema operativo. Proverò un'immagine nuova domani.
Radu,

20

Ho messo insieme una guida passo-passo per ottenere la configurazione di Git per Windows usando l'applicazione Plink di PuTTY per l'autenticazione SSH.

Segui sotto:


Impostare

  1. Installa putty.zip che è disponibile nella pagina di download di PuTTY o puoi scaricarlo singolarmente.

    • PuTTY: putty.exe (o tramite FTP )

      Il client SSH e Telnet stesso.

    • Plink : plink.exe (o tramite FTP )

      Un'interfaccia della riga di comando per i back-end PuTTY.

    • Pageant: pageant.exe (o tramite FTP )

      Un agente di autenticazione SSH per PuTTY, PSCP, PSFTP e Plink.

    • PuTTYgen: puttygen.exe (o tramite FTP )

      Un'utilità di generazione delle chiavi RSA e DSA.

  2. Genera chiavi RSA e PPK

    1. Usando Git Bash, usa ssh-keygenper generare una coppia di chiavi pubbliche / private RSA. Ulteriori informazioni su come eseguire questa operazione sono disponibili nell'articolo ufficiale Generating SSH keys .
    2. In PuTTYgen, importa la tua ~/.ssh/id_rsachiave (privata) esistente , tramite ConversionsImport key.
    3. Salvare la chiave importata tramite il Save private keypulsante come ~/.ssh/id_rsa.ppk.
    4. Ora dovresti avere le seguenti chiavi nella tua ~/.sshdirectory:

      • id_rsa: Chiave RSA privata (OpenSSH)
      • id_rsa.pub: Chiave RSA pubblica (OpenSSH)
      • id_rsa.ppk: Chiave privata (PuTTY)
  3. Installa Git per Windows .

    Assicurati di scegliere di usare Plink.

    Configurazione Git

    Nota: se hai già installato Git, puoi semplicemente eseguire nuovamente il programma di installazione e impostare Plink come applicazione SSH predefinita.

  4. Imposta i tuoi percorsi ambientali.

    1. Nel Pannello di controllo , vai alla vista Sistema.
    2. Scegli Impostazioni di sistema avanzate .
    3. Nella finestra Proprietà del sistema , fai clic sulla scheda Avanzate .
    4. Fare clic Environment variables….
    5. Aggiungi le seguenti variabili di sistema (se non già impostate):

      • GIT_HOME: C:\Program Files\Git
      • GIT_SSH: C:\Program Files (x86)\PuTTY\plink.exe
    6. Aggiungi la directory binaria Git al percorso di sistema.

      • Path: %Path%;%GIT_HOME%\bin
  5. Apri Pageant e carica la chiave ppk situata in ~/.ssh/id_rsa.ppk.

    Nota: una volta avviato Pageant, puoi fare clic sulla sua icona nella barra delle applicazioni situata nella barra delle applicazioni, accanto all'ora, a destra.

  6. Apri Putty e connettiti per testare la tua connessione tramite SSH e aggiungere la chiave del server come host noto.

    stucco

    Esempi di nomi host:

    • GitHub: git@github.com:22 (o tramite ssh-agent ssh -Tv git@github.com)
    • BitBucket: git@bitbucket.org:22 (o tramite ssh-agent ssh -Tv git@bitbucket.org)
  7. Avvia Git Bash.

    Dovresti essere in grado di eseguire il push e il pull dal tuo host remoto senza inserire una password ogni volta.


scorciatoia

È possibile inserire un collegamento nella directory di avvio per caricare automaticamente la chiave ogni volta che si accede al proprio account di Windows.

Tramite script batch

Questa idea è stata ispirata da una risposta a questa domanda:

Super utente: come creare un collegamento da 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

Tramite Esplora risorse

  1. Passare alla directory di avvio in Esplora risorse.

    • La Startup/directory utente (preferita) si trova in:

      %AppData%\Microsoft\Windows\Start Menu\Programs\Startup
      
    • La Startup/directory All Users si trova in:

      %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
      
  2. Fare clic con il tasto destro all'interno della cartella e selezionare NewShortcut

  3. Nella finestra di dialogo Crea collegamento , immettere le seguenti informazioni.

    • Posizione: "C:\Program Files (x86)\PuTTY\pageant.exe"
    • Nome: Pageant Autoload
  4. Fai clic con il pulsante destro del mouse sul nuovo collegamento e scegli Propertiesdal menu di scelta rapida.

  5. Modifica i seguenti campi nella scheda Collegamento :

    • Bersaglio: "%PROGRAMFILES(x86)%\PuTTY\pageant.exe" id_rsa.ppk
    • Inizia tra: %USERPROFILE%\.ssh

     
    Appunti:

    1. Se si utilizza un sistema operativo Windows a 32 bit, è necessario utilizzare la %PROGRAMFILES%variabile di ambiente anziché %PROGRAMFILES(x86)%.

    2. Se il collegamento è stato inserito nella directory di avvio di Tutti gli utenti, assicurarsi che l'utente corrente disponga di una id_rsa.ppkchiave nella propria ~/.sshdirectory o che la chiave non si carichi automaticamente.


Commenti finali

Ecco qua. La prossima volta che accedi al tuo profilo Windows, verrai accolto con un prompt Pageant per inserire la password per la tua chiave. Se non è stata impostata una password per la chiave, la chiave deve essere caricata automaticamente senza una richiesta.

Se non si è sicuri che la chiave sia stata caricata, visualizzare le chiavi correnti in Pageant selezionando Visualizza chiavi dal menu di scelta rapida di Pageant nella barra delle applicazioni.


3
Ottime istruzioni dettagliate! +1 da me!
Pimp Juice IT

L'importazione della chiave privata in puttygen era il mio anello mancante
Saurabh Kumar,

Ho dovuto creare una connessione in Putty per abilitare il passaggio nel processo di installazione dall'immagine.
user46193,

Fantastico! Ho avuto un problema simile con gitlab.com e questo l'ha risolto. Git stava usando stucco mentre la chiave che avevo caricato era OpenSSH. Grazie!
jgalak,

4

In parole povere

debug3: non un file chiave RSA1 /c/Users/Radu/\.ssh\github.ppk.

debug2: key_type_from_name: tipo di chiave sconosciuto 'PuTTY-User-Key-File-2

Puttygen può costruire diverse chiavi, Github vuole SSH1-RSA (?, Io uso chiavi ssh2 con Pageant su github)

Aggiunge

Vedi anche questo post sul debug di problemi di concorsi 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 è obsoleto e presenta numerose falle di sicurezza. Github non lo usa.
gravità

Questo equivalente a 'ssh -T git@github.com' è tristemente mancante nella documentazione di howth di github. Grazie per la pubblicazione.
Epu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.