Подключение к репозиторию Git с помощью SSH с помощью Visual Studio 2017

Я пытаюсь подключиться к репозиторию Git (на Bitbucket) с SSH из Visual Studio 2017 (который, насколько я знаю, поддерживает SSH для Git). У меня все настроено, репозиторий клонирован на моем компьютере, и я могу зафиксировать его, но если я попытаюсь сделать что-то вроде сбоя, это не будет выполнено со следующим сообщением (из окна "Выход" Visual Studio):

Error encountered while fetching: Git failed with a fatal error.
fatal: Could not read from remote repository.

Попробовав его из командной строки, я получаю эти несколько более информативные сообщения:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Из Git Bash я попытался открыть агента SSH, добавив свой закрытый ключ и извлечение, и, похоже, он работает (или, по крайней мере, я не получаю никаких сообщений, в отличие от того, когда агент не запущен или ключ не добавлен):

eval 'ssh-agent'
ssh-add ~/.ssh/xxxx
git fetch

Но Visual Studio по-прежнему не может подключиться. Я также попытался сделать то же самое из командной строки Windows:

ssh-agent
set SSH_AUTH_SOCK=/tmp/ssh-SIAryCa61iz9/agent.11128
set SSH_AGENT_PID=9804
ssh-add xxxx
git fetch

Но я все равно получаю ту же ошибку.

Я уже добавил открытый ключ к Bitbucket, а ssh -T [email protected] выводит "вошел в систему как xxxx". Кроме того, я могу правильно подключиться с помощью SourceTree и добавить закрытый ключ к Pageant (ключ, который я использую для ssh-add имеет необходимый формат OpenSSH, я создал его из.ppk).

Ответы

Ответ 1

Наконец, мне удалось заставить его работать, используя агент аутентификации PuTTY Pageant вместо ssh-agent и следуя описанным здесь шагам (он для Visual Studio Code, но работает для Visual Studio 2017, и я думаю, он должен работать для любого приложения, которое использует "официальный" Git для Windows).

Поскольку у меня уже установлен Pageant и создан закрытый ключ.ppk, мне нужно было сделать Git использовать Pageant, создав переменную среды Windows GIT_SSH и установив ее на путь к файлу plink.exe (внутри установки PuTTY, например C:\Program Files (x86)\PuTTY\plink.exe). С этим я просто должен открыть Pageant и добавить закрытый ключ (и оставить его открытым во время работы с репозиторием), а Visual Studio сможет подключаться и выдавать команды просто отлично.

Ответ 2

есть другой способ, у меня работает.

  1. подключитесь к Git-репозиторию с помощью другого ssh-клиента, например ssh.exe. принять соединение. он сгенерирует файл known_hosts.
  2. скопируйте известные_хосты и файл id_rsa в C:\Users\[имя_пользователя] \. ssh\
  3. Готово. даже без запуска-ssh-agent.

Кажется, VS2017 запускает ssh-соединение самостоятельно, поэтому игнорирует ключ, добавленный ssh-add, и использует только путь по умолчанию

Ответ 3

Вот решение, которое позволило бы подключить Visual Studio (и Git) к нескольким репозиториям по SSH, при необходимости с отдельными закрытыми ключами и агентом аутентификации ssh для обработки парольных фраз ключей.

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

Это объясняется на примере Bitbucket, но может быть расширено до Github и всего остального.

Предпосылки

  • Установленная Visual Studio
  • Битбакет аккаунт

Загрузите и установите Git

При открытии проекта Visual Studio попросит вас загрузить и установить пакет Git. Вы можете сделать это, используя ссылку, указанную в уведомлении Visual Studio, или воспользовавшись этой ссылкой.

Установите Git только для текущего пользователя. Используйте параметры установки по умолчанию.

Сгенерируйте вашу пару секретных/открытых ключей

  1. Найдите папку Git с приложением ssh-keygen.exe. По умолчанию это "% LOCALAPPDATA%\Programs\Git\usr\bin \", например: "C:\Users\NSM\AppData\Local\Programs\Git\usr\bin \"
  2. Откройте командную строку и перейдите в найденную папку:

    cd "%LOCALAPPDATA%\Programs\Git\usr\bin\"
    
  3. Создайте папку для хранения ключей, если она не существует

    mkdir "%HOME%\.ssh"
    
  4. Создайте новый ключ ssh:

    ssh-keygen -t rsa -b 4096 -C "<your email of id>" -f "%HOME%/.ssh/id_rsa_<file name>"
    

    например:

    ssh-keygen -t rsa -b 4096 -C "nsm" -f "%HOME%/.ssh/id_rsa_nsm"
    

    Желательно, чтобы они указали ключевую фразу. Запомните парольную фразу, вы не сможете восстановить ее, если забудете!

Добавьте свой открытый ключ в Bitbucket

  1. Откройте страницу управления учетной записью Bitbucket
  2. Откройте раздел ключей SSH и нажмите кнопку Добавить ключ
  3. Скопируйте и вставьте содержимое сгенерированного открытого ключа из папки "% HOME%/. Ssh/". Например: id_rsa_nsm.pub: ssh-rsa AAAAB3Nza<skipped>BkPqxFQ== nsm
  4. Нажмите кнопку Добавить ключ, чтобы отправить свой открытый ключ

Настройте ssh для использования вашего ключа для запросов исходного кода Bitbucket

Создайте файл конфигурации в папке "% HOME%/. Ssh/" со следующим содержимым:

    AddKeysToAgent yes

    Host <Bitbucket FQDN or any label>
      HostName <Bitbucket FQDN>
      User git
      IdentityFile ~/.ssh/id_rsa_<file name>

Например:

    cd %HOME%/.ssh/
    type config

Выход:

    AddKeysToAgent yes

    Host bitbucket.org
      HostName bitbucket.org
      User git
      IdentityFile ~/.ssh/id_rsa_nsm

Опция AddKeysToAgent yes добавит настроенные закрытые ключи в агент аутентификации ssh по требованию.

Настройте Git для использования агента аутентификации ssh

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

  1. В папке, где была найдена утилита ssh-keygen (по умолчанию это "% LOCALAPPDATA%\Programs\Git\usr\bin \"), создайте файл ssh.cmd со следующим содержимым:

    @echo off
    setlocal enabledelayedexpansion
    
    ::: File storing SSH_AUTH_SOCK and SSH_AGENT_PID of the running agent
    set __ssh_agent=%HOME%/.ssh/agent.env
    
    if exist %__ssh_agent% goto loadenv
    
    :startagent
    echo Starting SSH Authentication Agent...
    ssh-agent > %__ssh_agent%
    
    :loadenv
    ::: Loading the agent environment variables from 2 first lines of agent.env:
    ::: SSH_AUTH_SOCK and SSH_AGENT_PID
    set /a __count=0
    for /f "tokens=1 delims=;" %%a in (%__ssh_agent%) do (
      if !__count! LSS 2 (
        set %%a
        set /a __count+=1
      ) else (
        goto endloadenv
      )
    )
    :endloadenv
    
    ::: Checking the agent is running
    for /f "tokens=1 delims=, usebackq" %%a in ('TASKLIST /FI "PID eq %SSH_AGENT_PID%" /FO CSV /NH') do (
      if not %%a == "ssh-agent.exe" goto startagent
    )
    
    :startssh
    ::: Run ssh, passing to it all command line parameters
    ssh.exe %*
    

    Этот скрипт загрузит агент аутентификации ssh перед выполнением ssh.exe и позволит ssh.exe связываться с ним через сокет, указанный в переменной среды SSH_AUTH_SOCK.

  2. Из командной строки выполните следующую команду:

    git config --global core.sshCommand '%LOCALAPPDATA%/Programs/Git/usr/bin/ssh.cmd'
    

Создайте пульт для вашего локального репозитория, используя ссылку Bitbucket

Замените полное доменное имя в ссылке меткой, которую вы указали в файле ./ssh/config. Это позволит вам использовать разделы конфигурации с несколькими ключами при подключении к репозиториям Bitbucket или Github.

Все сделано

Ответ 4

Ну, я не мог найти прямой способ настроить репозиторий Git с VS 2017, поскольку опция Clone принимает только URI, а не SSH.

Я сделал следующее:

  1. Сгенерированный ключ SSH с помощью Git Bash и синхронизация сервера Git с ключами, сгенерированными Git bash. Вы должны публиковать ключ в разделе "Настройки".
  2. Загруженный клиент Sourcetree и настроил его с помощью SSH-ключа Options-> General-> Конфигурация клиента SSH → Необходимо предоставить закрытый ключ, сгенерированный Git bash
  3. Клонирование клиента с использованием исходного дерева и открытие того же решения из Visual Studio. Push/Pull будет работать как обычно.

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

Ответ 5

Этот способ работал для меня (VS 2017/Win7):

  1. Я установил git-scm и связался с ним.
  2. Сделано (ничего не копировать, оно просто работает)

Ответ 6

В VS2017

У меня была та же проблема. Я попробовал несколько способов решения:

  1. Удалено "git для windows" в установщике Visual Studio и удаляет git на панели управления
  2. Установлено два из них.
  3. попробовал некоторые настройки ssh

но не решила мою проблему. И я открыл "Установщик Visual Studio" и отремонтировал.it был решен.