Łączenie z github przy użyciu generowanego przez PuTTY klucza SSH w Windows 7


20

W przypadku nieskazitelnej instalacji systemu Windows 7 Enterprise:

  1. Zainstaluj PuTTY 0.62
  2. Utwórz parę kluczy publiczny / prywatny za pomocą puttygen.exe
  3. Dodaj klucz publiczny do wklejenia do kluczy autoryzowanych OpenSSH do konta github
  4. Dodaj klucz prywatny do widowiska
  5. Zainstaluj msysgit 1.7.8 z następującymi opcjami:
    • Użyj Git z wiersza polecenia systemu Windows
    • Użyj (Tortoise) Plink wskazał na poprawny plik plink.exe
  6. Upewnij się, że odcisk palca github został dodany do know_hosts, łącząc się z github.com w PuTTY i akceptując odcisk palca
  7. Edytuj, ~/.ssh/configaby przeczytać:

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

ssh -vvvT git@github.comdaje: http://pastebin.com/Tu3Fc6nJ . Zauważ, że pojawia się monit o hasło, mimo że zostało pomyślnie załadowane do widowiska.

Próbowałem: chmod 700 ~/.ssh; chmod 600 ~/.ssh/*z poziomu Git Bash, ale nie było żadnego efektu potwierdzonego przez ls -l.

Powinienem zauważyć, że miałem dokładnie tę konfigurację działającą na poprzedniej instalacji systemu Windows 7. O ile mogę powiedzieć, wszystko jest identyczne.

To, co działa, to generowanie kluczy z Git Bash. Nie mogę jednak dodać tych kluczy do widowiska, co jest ogromnym bólem. W efekcie wydaje się, że każda próba użycia kluczy wygenerowanych przez PuTTY kończy się niepowodzeniem.

Masz jakiś wgląd w to, co uniemożliwia to działanie w oparciu o dzienniki? Z góry dziękuję.


z -vT, proszę, mniejszy poziom gadatliwości
— Lazy Badger

Odpowiedzi:


20

Mylisz dwa całkowicie odrębne programy: PuTTY i OpenSSH.

  • plinki Pageant są częścią PuTTY. sshKomenda jest częścią OpenSSH. Nie jest jasne, z którego programu korzysta Git; w tym celu musisz sprawdzić %GIT_SSH%zmienną środowiskową.

  • Programy używają różnych protokołów agentów; OpenSSH nie może używać Pageant PuTTY; ma swój własny ssh-agent(co niestety jest nieco skomplikowane w systemie Windows).

  • PuTTY i plinkprzechowuj ustawienia sesji w rejestrze, edytowalne w interfejsie PuTTY. Nie używają niczego ~/.ssh/; ten katalog jest używany tylko przez OpenSSH.

  • Formaty kluczy prywatnych używane przez OpenSSH i PuTTY są różne; nie możesz używać .ppkklucza w OpenSSH. Jeśli wygenerowałeś klucz w PuTTYgen, musisz użyć jego polecenia „Eksportuj → 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:'
    

Zdaję sobie sprawę z różnicy i jak wskazano w oryginalnym poście, git został skonfigurowany tak, aby używał łącza plink po zainstalowaniu. Zweryfikowałem, że zmieniła to właściwą zmienną środowiskową, aby wskazywała na plink.exe. Chciałbym używać kluczy PuTTY (a to działało w przeszłości!) Z gitem, a fakt, że nie działa pomimo użycia łącza, jest dziwny ...
— Radu

Zasadniczo teraz mogę zmusić go do pracy z kluczami OpenSSH, ale nie z kluczami PuTTY. Próbowałem ponownie zainstalować PuTTY, a także generowałem nowe klucze. To nie wydaje się być problemem. Wiesz, co to może być?
— Radu,

1
@Radu: plinknie obsługuje formatu klucza OpenSSH. Jeśli twoja wersja tak, to nie plinkużywasz; to coś innego.
— grawity

1
@Radu: Również oryginalny post wskazuje na przeciwieństwo twojego roszczenia. Najpierw generujesz klucz za pomocą PuTTYgen i ładujesz go do Pageant, a następnie przechodzisz do konfigurowania OpenSSH i narzekasz, że „ sshprosi o podanie hasła, mimo że został załadowany do Pageant”. Ci są mylące dwa programy.
— grawity

Nigdy nie mówiłem, że plink obsługuje OpenSSH - jednak robi to Git Bash, ponieważ domyślnie używa OpenSSH. Czytając, masz rację, myliłem rzeczy, ponieważ, jak powiedziałeś, ~/.ssh/confignie jest używany przez PuTTY. Chciałbym jednak powtórzyć, że GIT_SSH wskazuje na połączenie, a jednak jeśli zmodyfikuję plik konfiguracyjny ssh dla OpenSSH, zmiany zostaną odzwierciedlone w Git Bash podczas próby połączenia z github. Zasadniczo uważam, że zmienna środowiskowa GIT_SSH jest ignorowana i przypuszczam, że jest to coś specyficznego dla mojego systemu operacyjnego. Spróbuję jutro świeży obraz.
— Radu,

20

Przygotowałem przewodnik krok po kroku, aby uzyskać konfigurację Git dla systemu Windows za pomocą aplikacji PlT PuTTY do uwierzytelniania SSH.

Śledź poniżej:


Ustawiać

  1. Zainstaluj putty.zip, który jest dostępny na stronie pobierania PuTTY lub możesz pobrać osobno.

    • PuTTY: putty.exe (lub przez FTP )

      Sam klient SSH i Telnet.

    • Plink: plink.exe (lub przez FTP )

      Interfejs wiersza poleceń do zaplecza PuTTY.

    • Pageant: pageant.exe (lub przez FTP )

      Agent uwierzytelniania SSH dla PuTTY, PSCP, PSFTP i Plink.

    • PuTTYgen: puttygen.exe (lub przez FTP )

      Narzędzie do generowania kluczy RSA i DSA.

  2. Generuj klucze RSA i PPK

    1. Korzystając z Git Bash, użyj ssh-keygendo wygenerowania pary kluczy publicznych / prywatnych RSA. Więcej informacji o tym, jak to zrobić, można znaleźć w oficjalnym artykule Generowanie kluczy SSH .
    2. W PuTTYgen zaimportuj istniejący ~/.ssh/id_rsa(prywatny) klucz za pomocą Conversions→ Import key.
    3. Zapisz zaimportowany klucz za pomocą Save private keyprzycisku jako ~/.ssh/id_rsa.ppk.
    4. Powinieneś teraz mieć następujące klucze w swoim ~/.sshkatalogu:

      • id_rsa: Prywatny klucz RSA (OpenSSH)
      • id_rsa.pub: Klucz publiczny RSA (OpenSSH)
      • id_rsa.ppk: Klucz prywatny (PuTTY)
  3. Zainstaluj Git dla Windows .

    Upewnij się, że zdecydowałeś się użyć Plink.

    Konfiguracja Git

    Uwaga: Jeśli masz już zainstalowany Git, możesz po prostu ponownie uruchomić instalator i ustawić Plink jako domyślną aplikację SSH.

  4. Ustaw ścieżki środowiska.

    1. W Panelu sterowania przejdź do widoku System.
    2. Wybierz Zaawansowane ustawienia systemu .
    3. W oknie Właściwości systemu kliknij kartę Zaawansowane .
    4. Kliknij Environment variables….
    5. Dodaj następujące zmienne systemowe (jeśli nie zostały jeszcze ustawione):

      • GIT_HOME: C:\Program Files\Git
      • GIT_SSH: C:\Program Files (x86)\PuTTY\plink.exe
    6. Dołącz katalog binarny Git do ścieżki systemowej.

      • Path: %Path%;%GIT_HOME%\bin
  5. Otwórz Pageant i załaduj klucz ppk znajdujący się pod adresem ~/.ssh/id_rsa.ppk.

    Uwaga: Po uruchomieniu programu Pageant możesz kliknąć jego ikonę na pasku zadań znajdującym się na pasku zadań obok godziny po prawej stronie.

  6. Otwórz Putty i połącz, aby przetestować połączenie przez SSH i dodać klucz serwera jako znany host.

    Kit

    Przykłady nazw hostów:

    • GitHub: git@github.com:22 (lub przez ssh-agent ssh -Tv git@github.com)
    • BitBucket: git@bitbucket.org:22 (lub przez ssh-agent ssh -Tv git@bitbucket.org)
  7. Uruchom Git Bash.

    Powinieneś być w stanie pchać i pobierać ze swojego zdalnego hosta bez podawania hasła za każdym razem.


Skrót

Możesz umieścić skrót w katalogu startowym, aby automatycznie ładować klucz przy każdym logowaniu do konta Windows.

Przez skrypt wsadowy

Pomysł ten został zainspirowany odpowiedzią na to pytanie:

Super użytkownik: Jak zrobić skrót z 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

Za pomocą Eksploratora Windows

  1. Przejdź do katalogu startowego w Eksploratorze Windows.

    • Startup/Katalog użytkowników (preferowany) znajduje się w:

      %AppData%\Microsoft\Windows\Start Menu\Programs\Startup
      
    • Startup/Katalog wszystkich użytkowników znajduje się w:

      %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
      
  2. Kliknij folder prawym przyciskiem myszy i wybierz New→Shortcut

  3. W oknie dialogowym Utwórz skrót wprowadź następujące informacje.

    • Lokalizacja: "C:\Program Files (x86)\PuTTY\pageant.exe"
    • Nazwa: Pageant Autoload
  4. Kliknij nowy skrót prawym przyciskiem myszy i wybierz Propertiesz menu kontekstowego.

  5. Zmodyfikuj następujące pola w zakładce Skrót :

    • Cel: "%PROGRAMFILES(x86)%\PuTTY\pageant.exe" id_rsa.ppk
    • Zacząć w: %USERPROFILE%\.ssh

     
    Uwagi:

    1. Jeśli używasz 32-bitowego systemu operacyjnego Windows, powinieneś użyć %PROGRAMFILES%zmiennej środowiskowej zamiast %PROGRAMFILES(x86)%.

    2. Jeśli umieściłeś skrót w katalogu startowym Wszyscy użytkownicy, upewnij się, że bieżący użytkownik ma id_rsa.ppkklucz w swoim ~/.sshkatalogu lub klucz nie zostanie załadowany automatycznie.


Uwagi końcowe

Masz to. Następnym razem, gdy zalogujesz się do swojego profilu systemu Windows, zostanie wyświetlony monit Pageant o podanie hasła do klucza. Jeśli nie ustawiłeś hasła do klucza, klucz powinien zostać załadowany automatycznie bez monitu.

Jeśli nie masz pewności, czy klucz został załadowany, wyświetl bieżące klucze w programie Pageant, wybierając opcję Wyświetl klucze z menu kontekstowego programu Pageant na pasku zadań.


3
Świetne szczegółowe instrukcje! +1 ode mnie!
— Pimp Juice IT,

Importowanie klucza prywatnego do puttygen było moim brakującym ogniwem
— Saurabh Kumar,

Musiałem utworzyć połączenie w Putty, aby umożliwić krok w procesie instalacji z obrazka.
— user46193,

Fantastyczny! Miałem podobny problem z gitlab.com i to rozwiązało. Git używał szpachli, a kluczem, który przesłałem, był OpenSSH. Dziękuję Ci!
— jgalak

4

W prostym angielskim

debug3: Nie plik klucza RSA1 /c/Users/Radu/\.ssh\github.ppk.

debug2: nazwa_typu_klucza: nieznany typ klucza „PuTTY-User-Key-File-2

PuTTYgen można zbudować inny kluczy, Github chce SSH1-RSA (?, Ja używać klawiszy SSH2 z Korowód na github)

Dodaje

Zobacz także ten post dotyczący debugowania problemów z widowiskami w 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 jest przestarzały i ma wiele luk bezpieczeństwa. Github tego nie używa.
— grawity

Niestety w dokumentacji github howto brakuje tego odpowiednika „ssh -T git@github.com”. Dziękujemy za wysłanie.
— Epu,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.