Подключение к github с помощью сгенерированного PuTTY SSH-ключа в Windows 7

19

На остальной нетронутой Windows 7 Enterprise установите:

  1. Установите PuTTY 0.62
  2. Создайте пару открытый / закрытый ключ с puttygen.exe
  3. Добавить открытый ключ для вставки в OpenSSH авторизованные_ключи в учетную запись github
  4. Добавить закрытый ключ к конкурсу
  5. Установите msysgit 1.7.8 со следующими параметрами:
    • Использовать Git из командной строки Windows
    • Используйте (черепаха) Plink указал на правильный plink.exe
  6. Убедитесь, что отпечаток github добавлен в know_hosts, подключившись к github.com в PuTTY и приняв отпечаток
  7. редактировать ~/.ssh/config читать:

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

ssh -vvvT git@github.com дает: http://pastebin.com/Tu3Fc6nJ , Обратите внимание, что мне предлагается ввести пароль, несмотря на то, что он успешно загружен в зрелище.

Я пробовал: chmod 700 ~/.ssh; chmod 600 ~/.ssh/* изнутри Git Bash, но не было никакого эффекта, что подтверждается ls -l,

Я должен отметить, что у меня была эта точная установка, работающая на предыдущей установке Windows 7. Насколько я могу судить, все идентично.

Что работает, так это генерация ключей из Git Bash. Тем не менее, я не могу добавить эти ключи в театрализованное представление, что является огромной болью. По сути, кажется, что любая попытка использовать ключи, сгенерированные PuTTY, является неудачной.

Любое понимание того, что мешает этому работать на основе журналов? Заранее спасибо.

Radu
источник
с -vT, пожалуйста, уровень детализации меньше
Lazy Badger

Ответы:

19

Вы путаете две совершенно разные программы: PuTTY и OpenSSH.

  • plink и Pageant являются частью PuTTY. ssh Команда является частью OpenSSH. Неясно, какая программа используется Git; вам нужно проверить %GIT_SSH% переменная окружения для этого.

  • Программы используют разные агентские протоколы; OpenSSH не может использовать Конкурс PuTTY; у него есть свой ssh-agent (который, к сожалению, несколько сложен для использования в Windows).

  • Замазка и plink сохранить настройки сеанса в реестре, редактируемые в интерфейсе PuTTY. Они не используют ничего в ~/.ssh/; этот каталог используется только OpenSSH.

  • Форматы закрытых ключей, используемые OpenSSH и PuTTY, различны; Вы не можете использовать .ppk ключ с OpenSSH. Если вы сгенерировали ключ в PuTTYgen, вы должны использовать его команду «Экспорт → 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:'
    
grawity
источник
Я знаю о разнице, и, как указано в исходном сообщении, git был установлен для использования plink при установке. Я проверил, что это изменило правильную переменную среды, чтобы указать на plink.exe. Я хотел бы использовать ключи PuTTY (и это работало в прошлом!) С git, и тот факт, что он не работает, несмотря на использование plink, странный ...
Radu
По сути, сейчас я могу заставить его работать с ключами OpenSSH, но не с ключами PuTTY. Я попытался переустановить PuTTY, а также создать новые ключи. Это не кажется проблемой. Есть идеи, что это может быть?
Radu
1
@Radu: plink не поддерживает формат ключей OpenSSH. Если ваша версия делает, то это не plink ты используешь; это что-то еще
grawity
1
@Radu: Кроме того, оригинальный пост указывает на противоположность вашей претензии. Сначала вы генерируете ключ с помощью PuTTYgen и загружаете его в Pageant, но затем вы идете с настройкой OpenSSH и жалуетесь, что ssh запрашивает парольную фразу, несмотря на загрузку в Pageant ". Вы являются путая две программы.
grawity
Я никогда не говорил, что plink поддерживает OpenSSH - однако Git Bash поддерживает, поскольку по умолчанию он использует OpenSSH. Читая назад, вы правы, я смущал вещи с тех пор, как вы сказали, ~/.ssh/config не используется PuTTY. Однако я хотел бы повторить, что GIT_SSH указывает на plink, и все же, если я изменяю конфигурационный файл ssh для OpenSSH, изменения отражаются в Git Bash при попытке подключиться к github. По сути, я считаю, что переменная среды GIT_SSH игнорируется, и я полагаю, что это что-то специфическое для моей ОС. Завтра попробую свежий образ.
Radu
18

Я собрал пошаговое руководство по настройке Git для Windows, используя приложение Plink PuTTY для аутентификации SSH.

Следуйте ниже:


Настроить

  1. устанавливать putty.zip который доступен на Страница загрузки PuTTY или вы можете скачать индивидуально.

    • PuTTY: putty.exe (или FTP )

      Сам SSH и клиент Telnet.

    • Plink: plink.exe (или FTP )

      Интерфейс командной строки для задней части PuTTY.

    • Pageant: pageant.exe (или FTP )

      Агент аутентификации SSH для PuTTY, PSCP, PSFTP и Plink.

    • PuTTYgen: puttygen.exe (или FTP )

      Утилита генерации ключей RSA и DSA.

  2. Генерация ключей RSA и PPK

    1. Используя Git Bash, используйте ssh-keygen создать пару открытых / закрытых ключей RSA. Более подробную информацию о том, как это сделать, можно найти на официальном Генерация ключей SSH статья.
    2. В PuTTYgen импортируйте свой существующий ~/.ssh/id_rsa (закрытый) ключ, через Конверсии Ключ импорта ,
    3. Сохраните импортированный ключ через Сохранить закрытый ключ кнопка как ~/.ssh/id_rsa.ppk,
    4. Теперь у вас должны быть следующие ключи в вашем ~/.ssh каталог:

      • id_rsa: Закрытый (OpenSSH) ключ RSA
      • id_rsa.pub: Открытый (OpenSSH) ключ RSA
      • id_rsa.ppk: Закрытый (PuTTY) ключ
  3. устанавливать Git для Windows ,

    Убедитесь, что вы решили использовать Plink.

    Git setup

    Замечания: Если вы уже установили Git, вы можете просто снова запустить установщик и установить Plink в качестве SSH-приложения по умолчанию.

  4. Установите ваши пути окружения.

    1. В Панель управления , перейдите к системному представлению.
    2. выберите Расширенные системные настройки ,
    3. в Свойства системы нажмите кнопку продвинутый Вкладка.
    4. Нажмите Переменные среды ... ,
    5. Добавьте следующее Системные переменные (если еще не установлено):

      • GIT_HOME: C:\Program Files\Git
      • GIT_SSH: C:\Program Files (x86)\PuTTY\plink.exe
    6. Добавьте двоичный каталог Git к системному пути.

      • Path: %Path%;%GIT_HOME%\bin
  5. Откройте Pageant и загрузите ключ ppk, расположенный по адресу ~/.ssh/id_rsa.ppk,

    Замечания: После запуска Pageant вы можете щелкнуть его значок на панели задач, расположенной на панели задач, рядом со временем справа.

  6. Откройте Putty и подключитесь, чтобы проверить ваше соединение через SSH и добавить ключ сервера в качестве известного хоста.

    Putty

    Примеры имен хостов:

    • GitHub: git@github.com:22 (или через ssh-agent ssh -Tv git@github.com )
    • BitBucket: git@bitbucket.org:22 (или через ssh-agent ssh -Tv git@bitbucket.org )
  7. Запустите Git Bash.

    Вы должны иметь возможность выдвигать и извлекать данные с удаленного хоста без ввода пароля каждый раз.


кратчайший путь

Вы можете поместить ярлык в папку автозагрузки, чтобы автоматически загружать ключ каждый раз, когда вы входите в свою учетную запись Windows.

Через пакетный скрипт

Эта идея была вдохновлена ​​ответом на этот вопрос:

Super User: Как сделать ярлык из 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

Через проводник Windows

  1. Перейдите в каталог автозагрузки в проводнике Windows.

    • пользователь Startup/ каталог (предпочтительно) находится по адресу:

      %AppData%\Microsoft\Windows\Start Menu\Programs\Startup
      
    • Все пользователи Startup/ каталог находится по адресу:

      %ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup
      
  2. Щелкните правой кнопкой мыши внутри папки и выберите новый кратчайший путь

  3. в Создать ярлык введите следующую информацию.

    • Место нахождения: "C:\Program Files (x86)\PuTTY\pageant.exe"
    • Название: Pageant Autoload
  4. Щелкните правой кнопкой мыши новый ярлык и выберите свойства из контекстного меню.

  5. Измените следующие поля под кратчайший путь вкладка:

    • Цель: "%PROGRAMFILES(x86)%\PuTTY\pageant.exe" id_rsa.ppk
    • Начинать: %USERPROFILE%\.ssh


    Заметки:

    1. Если вы используете 32-разрядную ОС Windows, вы должны использовать %PROGRAMFILES% переменная окружения вместо %PROGRAMFILES(x86)%,

    2. Если вы поместили ярлык в каталог запуска «Все пользователи», убедитесь, что текущий пользователь имеет id_rsa.ppk ключ в их ~/.ssh каталог или ключ не будет автоматически загружаться.


Заключительные замечания

Там у вас есть это. В следующий раз, когда вы войдете в свой профиль Windows, вас встретит приглашение Pageant для ввода пароля для вашего ключа. Если вы не установили пароль для своего ключа, ваш ключ должен быть загружен автоматически без запроса.

Если вы не уверены, загружен ли ваш ключ, просмотрите текущие ключи в Pageant, выбрав Посмотреть ключи из контекстного меню для Pageant в системном трее.

Mr. Polywhirl
источник
3
Отличные подробные инструкции! +1 от меня!
Pimp Juice IT
Импорт закрытого ключа в puttygen был моей отсутствующей ссылкой
Saurabh Kumar
Пришлось создать соединение в Putty для включения шага в процессе установки с картинки.
user46193
Фантастика! У меня была похожая проблема с gitlab.com, и это решило ее. Git использовал putty, а ключ, который я загрузил, был OpenSSH. Спасибо!
jgalak
4

Простым языком

debug3: не файл ключа RSA1 /c/Users/Radu/\.ssh\github.ppk.

debug2: key_type_from_name: неизвестный тип ключа 'PuTTY-User-Key-File-2

Puttygen может создавать разные ключи, Github хочет SSH1-RSA (?, Я использование ключи ssh2 с Pageant на github)

Добавляет

Смотрите также это пост об отладке конкурса проблемы с 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
Lazy Badger
источник
SSH1 устарел и имеет многочисленные дыры в безопасности. Github не использует его.
grawity
К сожалению, этот эквивалент 'ssh -T git@github.com' отсутствует в документации по github. Спасибо за публикацию.
Epu