Łą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 [email protected]daje: 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ę.

Radu
źródło
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 [email protected]
    OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
    ...
    debug2: key_type_from_name: unknown key type 'PuTTY-User-Key-File-2:'
    
grawitacja
źródło
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 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ą ConversionsImport 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:

  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 NewShortcut

  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ń.

Pan Polywhirl
źródło
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 [email protected]
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
Leniwy Borsuk
źródło
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 [email protected]”. Dziękujemy za wysłanie.
Epu,