webentwicklung-frage-antwort-db.com.de

Stellen Sie mithilfe von Visual Studio 2017 eine Verbindung zum Git-Repository mit SSH her

Ich versuche, eine Verbindung zu einem Git-Repository (auf Bitbucket) mit SSH von Visual Studio 2017 herzustellen (das meines Wissens SSH für Git unterstützt). Ich habe alles eingerichtet, das Repository auf meinem Computer geklont, und ich kann ein Commit ausführen, aber wenn ich versuche, etwas wie das Abrufen zu tun, schlägt die folgende Meldung (aus dem Visual Output-Fenster "Ausgabe") fehl:

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

Wenn ich es mit dem Befehl Prompt ausprobiere, erhalte ich diese etwas informativeren Meldungen:

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

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

Von Git Bash aus habe ich versucht, den SSH-Agenten zu öffnen, meinen privaten Schlüssel hinzuzufügen und abzurufen, und es scheint zu funktionieren (oder zumindest erhalte ich keine Nachrichten, anders als wenn der Agent nicht gestartet ist oder der Schlüssel nicht hinzugefügt wird):

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

Visual Studio kann jedoch immer noch keine Verbindung herstellen. Ich habe auch versucht, dasselbe von der Windows-Eingabeaufforderung aus zu tun:

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

Aber ich bekomme immer noch den gleichen Fehler.

Ich habe bereits den öffentlichen Schlüssel zu Bitbucket hinzugefügt, und ssh -T [email protected] gibt "als xxxx angemeldet" aus. Außerdem kann ich mit SourceTree eine Verbindung herstellen und Pageant den privaten Schlüssel hinzufügen (der Schlüssel, den ich für ssh-add verwende, hat das erforderliche OpenSSH-Format, ich habe es aus dem .ppk-Format erstellt).

8
Trisibo

Ich habe es endlich geschafft, dass es funktioniert, indem ich PuTTYs Pageant-Authentifizierungs-Agent anstelle von ssh-agent verwendet habe und die folgenden Schritte befolgte here (es ist für Visual Studio-Code, funktioniert aber für Visual Studio 2017 und ich denke, es sollte für jede Anwendung funktionieren verwendet das "offizielle" Git für Windows).

Da ich bereits Pageant installiert und einen privaten .ppk-Schlüssel erstellt hatte, musste ich Git nur dazu bringen, Pageant zu verwenden. Dazu wurde die GIT_SSH-Windows-Umgebungsvariable erstellt und auf den Pfad der Datei "plink.exe" (in der PuTTY-Installation zum Beispiel C:\Program Files (x86)\PuTTY\plink.exe). Wenn dies erledigt ist, muss ich nur Pageant öffnen und den privaten Schlüssel hinzufügen (und ihn während der Arbeit mit dem Repository geöffnet lassen). Visual Studio kann dann problemlos Verbindungen herstellen und Befehle ausgeben.

14
Trisibo

es gibt einen anderen Weg für mich.

  1. verbinden Sie sich mit einem Git-Repository, verwenden Sie einen anderen ssh-Client wie ssh.exe. akzeptiere die Verbindung Es wird die Datei known_hosts generiert.
  2. kopieren Sie die Datei known_hosts und id_rsa in C:\Users\[UserName] \. ssh \
  3. Erledigt. auch ohne start-ssh-agent.

vS2017 scheint die SSH-Verbindung selbst auszuführen, ignoriert also den von ssh-add hinzugefügten Schlüssel und verwendet nur den Standardpfadschlüssel

4
Raven

Nun, ich konnte den direkten Weg zum Konfigurieren des Git-Repositorys mit VS 2017 nicht finden, da die Option Klonen nur den URI und nicht den SSH akzeptiert.

Ich habe folgendes gemacht:

  1. Generierter SSH-Schlüssel mit Git Bash und Synchronisierung des Git-Servers mit den von Git-Bash generierten Schlüsseln. Sie sollten den öffentlichen Schlüssel unter Einstellungen angeben.
  2. Sourcetree-Client heruntergeladen und mit SSH-Schlüssel konfiguriert Optionen -> Allgemein -> SSH-Clientkonfiguration -> Müssen Sie den von Git basierten privaten Schlüssel angeben 
  3. Klonen Sie den Client mithilfe der Quellbaumstruktur und öffnen Sie dieselbe Lösung aus Visual Studio. Push/Pull funktioniert wie gewohnt.

Mit Git Bash können Sie die Keys generieren. Hier finden Sie hier

1
Rahul Shanbhag

Hier ist eine Lösung, die es erlaubt, Visual Studio (und Git) über SSH mit mehreren Repositorys zu verbinden, ggf. mit den separaten privaten Schlüsseln und dem ssh-Authentifizierungsagenten, um die Passphrasen der Schlüssel zu verarbeiten.

Dies ist für die Unternehmensbenutzer von Vorteil, da Sie keine Administratorrechte auf Ihrem Computer benötigen, um die folgenden Schritte auszuführen.

Es wird am Beispiel von Bitbucket erklärt, kann aber auch auf Github und alles andere erweitert werden.

Voraussetzungen

  • Installiertes Visual Studio
  • Bitbucket-Konto

Laden Sie Git herunter und installieren Sie es

Beim Öffnen eines Projekts werden Sie in Visual Studio aufgefordert, das Git-Paket herunterzuladen und zu installieren. Sie können dies tun, indem Sie einen in einer Visual Studio-Benachrichtigung bereitgestellten Link oder diesen link verwenden.

Installieren Sie Git nur für den aktuellen Benutzer . Verwenden Sie standardmäßig Installationsoptionen.

Generieren Sie Ihr privates/öffentliches Schlüsselpaar

  1. Suchen Sie einen Git-Ordner mit der Anwendung ssh-keygen.exe. Standardmäßig ist dies: "% LOCALAPPDATA%\Programs\Git\usr\bin \" Beispiel: "C:\Users\NSM\AppData\Local\Programs"\Git\usr\bin\"
  2. Öffnen Sie die Eingabeaufforderung und wechseln Sie in den Ordner, den Sie gefunden haben:

    cd "%LOCALAPPDATA%\Programs\Git\usr\bin\"
    
  3. Erstellen Sie einen Ordner, um Ihre Schlüssel zu speichern, falls er nicht vorhanden ist

    mkdir "%HOME%\.ssh"
    
  4. Generieren Sie einen neuen SSH-Schlüssel:

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

    zum Beispiel:

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

    Es ist ratsam, die Passphrase des Schlüssels anzugeben. Erinnern Sie sich an die Passphrase. Sie können sie nicht wiederherstellen, wenn Sie sie vergessen haben!

Fügen Sie Ihren öffentlichen Schlüssel zu Bitbucket hinzu

  1. Öffnen Sie Ihre Bitbucket-Kontoverwaltungsseite
  2. Öffnen Sie den Abschnitt SSH-Schlüssel und klicken Sie auf Schlüssel hinzufügen.
  3. Kopieren Sie den Inhalt des generierten öffentlichen Schlüssels aus dem Ordner "% HOME% /. Ssh /", und fügen Sie ihn ein. Zum Beispiel: id_rsa_nsm.pub: ssh-rsa AAAAB3Nza<skipped>BkPqxFQ== nsm
  4. Klicken Sie auf die Schaltfläche Schlüssel hinzufügen, um Ihren öffentlichen Schlüssel zu senden

Konfigurieren Sie ssh für die Verwendung Ihres Schlüssels für Bitbucket-Quellcodeanforderungen

Erstellen Sie die Datei config im Ordner "% HOME% /. Ssh /" mit dem folgenden Inhalt:

    AddKeysToAgent yes

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

Zum Beispiel:

    cd %HOME%/.ssh/
    type config

Ausgabe:

    AddKeysToAgent yes

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

Die Option AddKeysToAgent yes fügt die konfigurierten privaten Schlüssel dem ssh-Authentifizierungsagenten bei Bedarf hinzu

Konfigurieren Sie Git für die Verwendung des SSH-Authentifizierungsagenten

Die Passphrase jedes Mal einzugeben, wenn der private Schlüssel verwendet wurde, ist eine langwierige Belastung. Um dies zu vermeiden, verwenden wir den ssh-Authentifizierungsagenten

  1. Erstellen Sie in dem Ordner, in dem das Dienstprogramm ssh-keygen gefunden wurde (standardmäßig: "% LOCALAPPDATA%\Programs\Git\usr\bin \"), die Datei ssh.cmd mit folgendem Inhalt:

    @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 %*
    

    Dieses Skript lädt den ssh-Authentifizierungsagenten, bevor ssh.exe ausgeführt wird, und ermöglicht ssh.exe die Kommunikation mit dem Agenten über das Socket, das in der Umgebungsvariablen SSH_AUTH_SOCK angegeben ist.

  2. Führen Sie an der Eingabeaufforderung den folgenden Befehl aus:

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

Erstellen Sie eine Fernbedienung für Ihr lokales Repository mithilfe des von Bitbucket bereitgestellten Links

Ersetzen Sie den vollqualifizierten Domänennamen in der Verknüpfung durch ein Label, das Sie in der Datei ./ssh/config angegeben haben. Auf diese Weise können Sie bei der Verbindung mit Bitbucket- oder Github-Repositorys Konfigurationsabschnitte mit mehreren Schlüsseln verwenden

Alles erledigt

1
Sergey Nudnov

In VS2017

Ich hatte dasselbe Problem. Ich versuchte ein paar Lösungswege:

  1. "Git for windows" wurde im Visual Studio Installer entfernt und in der Systemsteuerung gelöscht
  2. Installierte zwei davon.
  3. probierte ein paar ssh einstellungen

aber nicht gelöst mein problem . Und ich öffnete "Visual Studio Installer" und reparierte . es wurde gelöst.

0
Ahmet İCAT

Dieser Weg hat für mich funktioniert (VS 2017/Win7):

  1. Ich habe git-scm installiert und damit verbunden. 
  2. Fertig (nichts zu kopieren, es funktioniert einfach)
0
ndberg