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).
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.
es gibt einen anderen Weg für mich.
vS2017 scheint die SSH-Verbindung selbst auszuführen, ignoriert also den von ssh-add hinzugefügten Schlüssel und verwendet nur den Standardpfadschlüssel
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:
Mit Git Bash können Sie die Keys generieren. Hier finden Sie hier .
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.
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.
Öffnen Sie die Eingabeaufforderung und wechseln Sie in den Ordner, den Sie gefunden haben:
cd "%LOCALAPPDATA%\Programs\Git\usr\bin\"
Erstellen Sie einen Ordner, um Ihre Schlüssel zu speichern, falls er nicht vorhanden ist
mkdir "%HOME%\.ssh"
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!
ssh-rsa AAAAB3Nza<skipped>BkPqxFQ== nsm
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
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
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.
Führen Sie an der Eingabeaufforderung den folgenden Befehl aus:
git config --global core.sshCommand '%LOCALAPPDATA%/Programs/Git/usr/bin/ssh.cmd'
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
In VS2017
Ich hatte dasselbe Problem. Ich versuchte ein paar Lösungswege:
aber nicht gelöst mein problem . Und ich öffnete "Visual Studio Installer" und reparierte . es wurde gelöst.
Dieser Weg hat für mich funktioniert (VS 2017/Win7):