Herstellen einer Verbindung zu Github unter Verwendung des von PuTTY generierten SSH-Schlüssels in Windows 7


20

Auf einer ansonsten unberührten Windows 7 Enterprise-Installation:

  1. Installieren Sie PuTTY 0.62
  2. Erstellen Sie mit puttygen.exe ein öffentliches / privates Schlüsselpaar
  3. Fügen Sie den öffentlichen Schlüssel zum Einfügen in OpenSSH authorized_keys zum github-Konto hinzu
  4. Fügen Sie dem Festzug einen privaten Schlüssel hinzu
  5. Installieren Sie msysgit 1.7.8 mit folgenden Optionen:
    • Verwenden Sie Git über die Windows-Eingabeaufforderung
    • Verwenden Sie (Tortoise) Plink, um plink.exe zu korrigieren
  6. Stellen Sie sicher, dass know_hosts ein Github-Fingerabdruck hinzugefügt wird, indem Sie in PuTTY eine Verbindung zu github.com herstellen und den Fingerabdruck akzeptieren
  7. ~/.ssh/configZum Lesen bearbeiten :

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

ssh -vvvT git@github.comgibt: http://pastebin.com/Tu3Fc6nJ . Beachten Sie, dass ich zur Eingabe des Passworts aufgefordert werde, obwohl es erfolgreich in den Festzug geladen wurde.

Ich habe es versucht: chmod 700 ~/.ssh; chmod 600 ~/.ssh/*aus Git Bash heraus, aber es gab keinen Effekt, wie durch verifiziertls -l .

Ich sollte beachten, dass ich genau dieses Setup bei einer früheren Windows 7-Installation hatte. Soweit ich das beurteilen kann, ist alles identisch.

Was funktioniert, ist das Generieren von Schlüsseln aus Git Bash. Ich kann diese Schlüssel jedoch nicht zu einem Festzug hinzufügen, was ein großer Schmerz ist. Tatsächlich scheint jeder Versuch, von PuTTY generierte Schlüssel zu verwenden, erfolglos zu sein.

Gibt es einen Einblick darüber, warum dies aufgrund der Protokolle nicht funktioniert? Danke im Voraus.


mit -vT, bitte, weniger Ausführlichkeitsstufe
Lazy Badger

Antworten:


20

Sie verwechseln zwei völlig getrennte Programme: PuTTY und OpenSSH.

  • plinkund Pageant sind Teil von PuTTY. Der sshBefehl ist Teil von OpenSSH. Es ist unklar, welches Programm von Git verwendet wird. Sie müssen die %GIT_SSH%Umgebungsvariable dafür überprüfen .

  • Die Programme verwenden verschiedene Agentenprotokolle. OpenSSH kann PuTTYs Pageant nicht verwenden. Es hat seine eigene ssh-agent(die unter Windows leider etwas kompliziert zu bedienen ist).

  • PuTTY und plinkspeichern Sie die Sitzungseinstellungen in der Registrierung, die in der PuTTY-Benutzeroberfläche bearbeitet werden kann. Sie verwenden nichts in ~/.ssh/; Dieses Verzeichnis wird nur von OpenSSH verwendet.

  • Die von OpenSSH und PuTTY verwendeten privaten Schlüsselformate sind unterschiedlich. Sie können .ppkmit OpenSSH keinen Schlüssel verwenden. Wenn Sie den Schlüssel in PuTTYgen generiert haben, müssen Sie den Befehl "Export → OpenSSH" verwenden.

    $ 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:'
    

Ich bin mir des Unterschieds bewusst und wie im Originalbeitrag angegeben, wurde git so eingestellt, dass plink bei der Installation verwendet wird. Ich habe überprüft, dass dies die richtige Umgebungsvariable geändert hat, um auf plink.exe zu verweisen. Ich möchte PuTTY-Schlüssel (und das hat in der Vergangenheit funktioniert!) Mit git verwenden, und die Tatsache, dass es nicht funktioniert, obwohl plink verwendet wird, ist seltsam ...
Radu

Im Grunde kann ich es jetzt mit OpenSSH-Schlüsseln zum Laufen bringen, aber nicht mit PuTTY-Schlüsseln. Ich habe versucht, PuTTY neu zu installieren und neue Schlüssel zu generieren. Das scheint kein Problem zu sein. Irgendeine Idee woran es liegen könnte?
Radu

1
@Radu: plinkunterstützt kein OpenSSH-Schlüsselformat. Wenn dies bei Ihrer Version der Fall ist, verwenden Sie diese nicht plink. es ist etwas anderes.
Grawity

1
@ Radu: Auch der ursprüngliche Beitrag zeigt das Gegenteil Ihrer Behauptung. Zuerst generieren Sie mit PuTTYgen einen Schlüssel und laden ihn in Pageant. Anschließend konfigurieren Sie OpenSSH und beklagen, dass " sshtrotz des Ladens in Pageant zur Eingabe einer Passphrase aufgefordert wird ". Sie sind verwirrend die beiden Programme.
Grawity

Ich habe nie gesagt, dass plink OpenSSH unterstützt - Git Bash jedoch, da standardmäßig OpenSSH verwendet wird. Wenn Sie zurücklesen, haben Sie Recht, ich habe Dinge verwirrt, da ~/.ssh/configPuTTY, wie Sie sagten, nicht verwendet wird. Ich möchte jedoch noch einmal betonen, dass GIT_SSH darauf hindeutet, sich zu verbinden, und dennoch, wenn ich die ssh-Konfigurationsdatei für OpenSSH ändere, werden die Änderungen in Git Bash wiedergegeben, wenn ich versuche, eine Verbindung zu github herzustellen. Im Wesentlichen glaube ich, dass die Umgebungsvariable GIT_SSH ignoriert wird, und ich nehme an, dass dies für mein Betriebssystem spezifisch ist. Ich werde morgen ein frisches Bild anprobieren.
Radu

20

Ich habe eine Schritt-für-Schritt-Anleitung zusammengestellt, um mit PuTTYs Plink-Anwendung für die SSH-Authentifizierung ein Git-Setup für Windows zu erhalten.

Folgen Sie weiter unten:


Installieren

  1. Installieren Sie putty.zip, das auf der PuTTY-Download-Seite verfügbar ist, oder laden Sie es einzeln herunter.

    • PuTTY: putty.exe (oder per FTP )

      Der SSH- und Telnet-Client selbst.

    • Plink: plink.exe (oder per FTP )

      Eine Befehlszeilenschnittstelle zum PuTTY-Back-End.

    • Pageant: pageant.exe (oder per FTP )

      Ein SSH-Authentifizierungsagent für PuTTY, PSCP, PSFTP und Plink.

    • PuTTYgen: puttygen.exe (oder per FTP )

      Ein Dienstprogramm zur Erzeugung von RSA- und DSA-Schlüsseln.

  2. Generieren Sie RSA- und PPK-Schlüssel

    1. Verwenden Sie die Git Bash, ssh-keygenum ein Paar öffentlicher / privater RSA-Schlüssel zu generieren. Weitere Informationen dazu finden Sie im offiziellen Artikel Generieren von SSH-Schlüsseln .
    2. Importieren Sie in PuTTYgen Ihren vorhandenen ~/.ssh/id_rsa(privaten) Schlüssel über ConversionsImport key.
    3. Speichern Sie den importierten Schlüssel über die Save private keySchaltfläche als ~/.ssh/id_rsa.ppk.
    4. Sie sollten jetzt die folgenden Schlüssel in Ihrem ~/.sshVerzeichnis haben:

      • id_rsa: Privater (OpenSSH) RSA-Schlüssel
      • id_rsa.pub: Öffentlicher (OpenSSH) RSA-Schlüssel
      • id_rsa.ppk: Privater (PuTTY) Schlüssel
  3. Installieren Sie Git für Windows .

    Stellen Sie sicher, dass Sie Plink verwenden.

    Git Setup

    Hinweis: Wenn Sie Git bereits installiert haben, können Sie das Installationsprogramm einfach erneut ausführen und Plink als Standard-SSH-Anwendung festlegen.

  4. Legen Sie Ihre Umgebungspfade fest.

    1. In der Systemsteuerung , wechseln Sie zum Ansicht System.
    2. Wählen Sie Erweiterte Systemeinstellungen .
    3. Im Systemeigenschaften - Fenster klicken Sie auf die erweiterte Registerkarte.
    4. Klicken Sie auf Environment variables….
    5. Fügen Sie die folgenden Systemvariablen hinzu (falls nicht bereits festgelegt):

      • GIT_HOME: C:\Program Files\Git
      • GIT_SSH: C:\Program Files (x86)\PuTTY\plink.exe
    6. Hängen Sie das Git-Binärverzeichnis an den Systempfad an.

      • Path: %Path%;%GIT_HOME%\bin
  5. Öffnen Sie Pageant und laden Sie den PPK-Schlüssel unter ~/.ssh/id_rsa.ppk.

    Hinweis: Sobald Pageant gestartet wurde, können Sie auf das entsprechende Symbol in der Taskleiste rechts neben der Uhrzeit klicken.

  6. Öffnen Sie Putty und stellen Sie eine Verbindung her, um Ihre Verbindung über SSH zu testen und den Schlüssel des Servers als bekannten Host hinzuzufügen.

    Kitt

    Beispiele für Hostnamen:

    • GitHub: git@github.com:22 (oder via ssh-agent ssh -Tv git@github.com)
    • BitBucket: git@bitbucket.org:22 (oder via ssh-agent ssh -Tv git@bitbucket.org)
  7. Starten Sie Git Bash.

    Sie sollten in der Lage sein, von Ihrem Remote-Host aus zu pushen und zu ziehen, ohne jedes Mal ein Kennwort eingeben zu müssen.


Abkürzung

Sie können eine Verknüpfung in Ihr Startverzeichnis einfügen, um Ihren Schlüssel bei jeder Anmeldung bei Ihrem Windows-Konto automatisch zu laden.

Über Stapelskript

Diese Idee wurde durch eine Antwort auf diese Frage inspiriert:

Super User: Wie erstelle ich eine Verknüpfung von 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

Über den Windows Explorer

  1. Navigieren Sie im Windows Explorer zum Startverzeichnis.

    • Das Benutzerverzeichnis Startup/(bevorzugt) befindet sich unter:

      %AppData%\Microsoft\Windows\Start Menu\Programs\Startup
      
    • Das All Users- Startup/Verzeichnis befindet sich unter:

      %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
      
  2. Klicken Sie mit der rechten Maustaste in den Ordner und wählen Sie NewShortcut

  3. In der Verknüpfung erstellen Dialog geben Sie die folgenden Informationen.

    • Ort: "C:\Program Files (x86)\PuTTY\pageant.exe"
    • Name: Pageant Autoload
  4. Rechtsklick auf die neue Verknüpfung und wählen Sie Propertiesaus dem Kontextmenü.

  5. Ändern Sie die folgenden Felder auf der Registerkarte Verknüpfung :

    • Ziel: "%PROGRAMFILES(x86)%\PuTTY\pageant.exe" id_rsa.ppk
    • Startet in: %USERPROFILE%\.ssh

     
    Anmerkungen:

    1. Wenn Sie ein 32-Bit-Windows-Betriebssystem verwenden, sollten Sie %PROGRAMFILES%stattdessen die Umgebungsvariable verwenden %PROGRAMFILES(x86)%.

    2. Wenn Sie Ihre Verknüpfung im Startverzeichnis für alle Benutzer abgelegt haben, stellen Sie sicher, dass der aktuelle Benutzer einen id_rsa.ppkSchlüssel in seinem ~/.sshVerzeichnis hat. Andernfalls wird der Schlüssel nicht automatisch geladen.


Schlußbemerkungen

Hier hast du es. Wenn Sie sich das nächste Mal in Ihrem Windows-Profil anmelden, werden Sie mit einer Pageant-Eingabeaufforderung zur Eingabe des Kennworts für Ihren Schlüssel begrüßt. Wenn Sie für Ihren Schlüssel kein Kennwort festgelegt haben, sollte Ihr Schlüssel automatisch und ohne Aufforderung geladen werden.

Wenn Sie sich nicht sicher , ob Ihr Schlüssel sind geladen , um die aktuellen Schlüssel in Pageant anzeigen , indem Sie die Auswahl Ansicht Keys aus dem Kontextmenü für Pageant in der Taskleiste.


3
Tolle ausführliche Anleitung! +1 von mir!
Pimp Juice IT

Der Import des privaten Schlüssels in puttygen war mein fehlendes Glied
Saurabh Kumar

Musste eine Verbindung in Putty erstellen, um den Schritt im Einrichtungsprozess aus dem Bild zu aktivieren.
User46193

Fantastisch! Ich hatte ein ähnliches Problem mit gitlab.com und dieses Problem wurde behoben. Git verwendete Putty, während der Schlüssel, den ich hochgeladen hatte, der OpenSSH war. Vielen Dank!
Jgalak

4

In reinem Englisch

debug3: Keine RSA1-Schlüsseldatei /c/Users/Radu/\.ssh\github.ppk.

debug2: key_type_from_name: unbekannter Schlüsseltyp 'PuTTY-User-Key-File-2

Puttygen kann verschiedene Schlüssel bauen, Github will SSH1-RSA (?, Ich benutze ssh2-Schlüssel mit Pageant auf Github)

Fügt hinzu

Siehe auch diesen Beitrag zum Debuggen von Pageant- Problemen mit 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 ist veraltet und weist zahlreiche Sicherheitslücken auf. Github benutzt es nicht.
Grawity

Dieses Äquivalent zu 'ssh -T git@github.com' fehlt leider in der Dokumentation zum Github-Howto. Vielen Dank für die Veröffentlichung.
Epu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.