Wie kann ich Git für Windows mitteilen, wo sich mein privater RSA-Schlüssel befindet?

487

Mein Git-Setup läuft unter Linux einwandfrei, aber wenn ich versuche, Dinge unter Windows einzurichten (mit Git für Windows und TortoiseGit ), weiß ich nicht, wo ich meinen privaten SSH-Schlüssel ablegen soll (oder besser noch, wie ich sagen soll, sshwo er ist) gelegen). Ich verwende die Standardoption ssh.exe während der Installation von Git für Windows. Das Setup funktioniert einwandfrei, wenn ich die Kennwortauthentifizierung (anstelle von RSA) auf dem Server zulasse.

binärorganisch
quelle
Ich habe das gleiche Problem, ich kann in meine Dev-Box mit einem öffentlichen Schlüssel als "root" mit dem "Git Bash" -Programm ssh, das mit "Git For Windows" installiert wurde, aber ich kann mich mit meinem nicht als "git" anmelden key, obwohl ich meine "authorized_keys" -Datei von meinem "root" auf meinen "git" -Benutzer kopiert und die Besitzer und Berechtigungen korrekt festgelegt habe. Warum kann ich mich nicht als "git" anmelden, wenn "root" mit genau derselben "authorized_keys" -Datei arbeitet? Stattdessen werden bei "git" alle privaten Schlüssel übergeben, die mit "root" identisch sind, und es wird nach einem Kennwort gefragt. Dies ist übrigens ein Centos 5.5-Server.
@fuzzy lollipop: Hast du die richtigen Berechtigungen für die authorized_keys-Datei deines Git-Benutzers? Es sollte chmod 600 sein und dem Git-Benutzer gehören. Wenn es dem Root-Benutzer gehört, funktioniert es nicht
Dan McClain
Ja, alle Dateien und Verzeichnisse sind die richtigen Besitzer und Berechtigungen

Antworten:

486

Für Git Bash

Wenn Sie msysgit ausführen (ich nehme an, dass Sie dies tun) und Git Bash ausführen möchten (ich empfehle es über TortoiseGit, aber ich lehne mich jetzt mehr an die CLI als an die GUI), müssen Sie herausfinden, welches Ihr Ausgangsverzeichnis für Git ist Bash indem pwddu es startest und dann tippst (Unter Windows 7 wird es ungefähr so ​​sein wie C:\Users\phsrich denke). Während Sie in Git Bash sind, sollten Sie mkdir .ssh.

Nachdem Sie das .sshBasisverzeichnis und einen Ordner darunter haben, möchten Sie PuTTYgen öffnen und den zuvor erstellten Schlüssel (PPK-Datei) öffnen. Sobald Ihr Schlüssel geöffnet ist, möchten Sie ihn auswählen Conversions -> Export OpenSSH keyund in speichern HOME\.ssh\id_rsa. Nachdem Sie den Schlüssel an diesem Ort haben, erkennt Git Bash den Schlüssel und verwendet ihn.

Hinweis: Kommentare weisen darauf hin, dass dies nicht in allen Fällen funktioniert. Möglicherweise müssen Sie den OpenSSH-Schlüssel nach Program Files\Git\.ssh\id_rsa(oder Program Files (x86)\Git\.ssh\id_rsa) kopieren .

Für TortoiseGit

Wenn Sie TortoiseGit verwenden, müssen Sie den SSH-Schlüssel gemäß den Anweisungen von pacey festlegen . Sie müssen dies für jedes Repository tun, mit dem Sie TortoiseGit verwenden.

Dan McClain
quelle
4
Die Anweisungen von pacey für tortoisegit funktionieren erst, wenn Sie das Repository haben (da die Konfigurationseinstellung "remote" nur angezeigt wird, wenn Sie auf ein Repository einwirken), und Sie können das Repository wahrscheinlich überhaupt nicht abrufen, wenn Sie können. ' t Authentifizieren Sie sich, um vom Ursprung zu klonen. Tricky!
Kylotan
43
Mit GitBash musste ich meine ~/.ssh/id_rsaDatei kopieren Program Files\Git\.ssh\id_rsa- was etwas verwirrend war, aber jetzt können IntelliJ und Windows cmd auf Git-Repositorys pushen, die Schlüsselauthentifizierung verwenden.
JP.
7
Gleichfalls. Ich habe gerade git-for-windows installiert und starte es von cmd.exe aus. Ich musste die Dateien ablegen id_rsaund id_rsa.pubin c:\program files (x86)\Git\.ssh. Das .sshdir war schon da. Danke, JP.
Cheeso
5
Der zweite Absatz war golden. :)
Bjørn
4
@Damon: Es sollte id_rsaohne die Erweiterung sein. Das ist der Dateiname, es ist kein Verzeichnis
Dan McClain
107

Wenn Sie den mit Git für Windows gelieferten integrierten SSH-Client verwenden, müssen Sie die Umgebungsvariable HOME so einrichten, dass der Git-SSH-Client den Schlüssel findet.

Bei einer Windows Vista- Installation würde dies beispielsweise durch Ausgabe setx HOME c:\Users\admin\in der Befehlszeile erfolgen.

Es war mein Tag und behebt das Problem mit Git, vorausgesetzt, Ihr privater Schlüssel ist nicht passwortgeschützt. Wenn Sie ssh-agent verwenden möchten, können Sie wahrscheinlich ssh-agent cmd.exe (obwohl ich das noch nie getan habe) und ssh-add wie gewohnt ausführen.

Beachten Sie, dass alle Git / SSH-Tools von einer cmd.exe ausgeführt werden sollen, um ein Fenster nicht zu blinken .

Wenn dies nicht korrekt funktioniert, kann die Verwendung von plink wahrscheinlich durch Optimieren von GIT_SSH erreicht werden . Lesen Sie alle SVN + ssh-Tutorials. Dies ist im Grunde das gleiche Installationsprogramm, das Sie einrichten müssen.

Okt.
quelle
16
Dies ist, was ich gesucht habe, da ich versuche, die Windows-Eingabeaufforderung zu verwenden, nicht Git Bash.
John Ruiz
Nizza, einfache Lösung, aber es wäre schwer gewesen, ohne dies herauszufinden!
Thaddeusmt
Wichtig ist auch, dass zwischen HOME = und c: \ ... Oct keine Leerzeichen stehen. :-)
Lutz
2
Das setx HOME c:\Users\admin` command doesn't seems to be working in Git Bash. You have to use cmd` statt.
Trejder
2
+1GIT_SSH=c:\pathto\plink.exe
Nick Grealy
54

Sie können den Schlüsselspeicherort für TortoiseGit folgendermaßen angeben:

  • Öffnen Sie ein Explorer-Fenster.
  • Öffnen Sie das Kontextmenü und navigieren Sie zu TortoiseGitEinstellungen
  • Navigieren Sie im nun geöffneten Fenster zu GitRemote
  • Stellen Sie den Pfad zu Ihrem PuTTY-Schlüssel in das entsprechende Eingabefeld ein.

Ein Screenshot ist unten:

Geben Sie hier eine Bildbeschreibung ein

pacey
quelle
8
Wenn Sie Ihren privaten Schlüssel von einem anderen Format in das PPK-Format konvertieren möchten, können Sie THIS
Tariq M Nasim
Es hat bei mir funktioniert.
Maxim Eliseev
6
Git> Remote wird erst angezeigt, wenn Sie das Repository erfolgreich geklont haben.
Steve Pitchers
5
Eine viel einfachere Lösung besteht darin, alles so einzurichten, dass es in git ordnungsgemäß funktioniert (mit openSSH), und TortoiseGit dann anzuweisen, die von git verwendete Datei ssh.exe zu verwenden. Siehe stackoverflow.com/a/33328628/318317. Auf diese Weise müssen Sie dies nur einmal beheben.
Daniel Rose
50

Keine der vorherigen Antworten hat für mich funktioniert. Hier war, was am Ende für mich gearbeitet hat. Es ist eigentlich ziemlich einfach, wenn man weiß, was man tippt. PuTTY wird nicht benötigt.

  • Öffnen Sie eine Git Bash-Eingabeaufforderung
  • Tippe 'ssh-keygen'
    • Akzeptieren Sie den Standardspeicherort
    • Wähle eine leere Passphrase (drücke einfach die Eingabetaste für alle Fragen)
  • Kopieren Sie nun den öffentlichen Schlüssel auf Ihren Server, zum Beispiel: scp ~ / .ssh / id_rsa.pub [email protected]: ~

Das ist der Teil, den Sie auf Ihrem eigenen Computer gemacht haben. Nun sshin den Zielserver, dann tun

mkdir -p ~/.ssh
cd ~/.ssh
cat ../id_rsa.pub >> authorized_keys
rm ../id_rsa.pub

Das ist es! Sie sind fertig! Führen Sie in Git Bash die folgenden Schritte aus, um Folgendes zu testen:

ssh [email protected] ls

Wenn es die Dateien in Ihrem Home-Verzeichnis auf dem Git-Server auflistet, sind Sie fertig!

Für GitHub haben Sie keinen Shell-Zugriff auf den Server, aber Sie können den Schlüssel über die Website hochladen. Gehen Sie also für das Bit "Jetzt auf Ihren Server kopieren" wie folgt vor:

  • Geben Sie in Git Bash 'cat ~ / .ssh / id_rsa.pub' ein, wählen Sie das Ergebnis aus und kopieren Sie es in die Zwischenablage.
  • Gehen Sie auf der GitHub-Website zu "Kontoeinstellungen", "SSH- und GPG-Schlüssel", klicken Sie auf "Neuer SSH-Schlüssel" und fügen Sie den Schlüssel ein.
Hugh Perkins
quelle
8
Erstellen Sie keine Schlüssel ohne Passphrasen. Es ist so, als würde man sein Passwort in eine Textdatei schreiben, nur dass jeder den Standardspeicherort für private Schlüssel kennt.
GregB
14
Sie beantworten die falsche Frage. Mit dem Q wird auf einen vorhandenen privaten Schlüssel verwiesen.
Orangutech
7
@GregB, ich sehe es so: Jeder Server, für den ich einen kennwortlosen Schlüssel erstelle, ist so sicher wie mein Laptop, es ist eine Erweiterung des Sicherheitsbereichs meines Laptops. Eigentlich nicht einmal, da mein Home-Verzeichnis verschlüsselt ist ;-) Also, es ist meiner Meinung nach so sicher wie die verschlüsselte Home-Partition auf meinem Laptop, die "gut genug" ist, um den Zugriff auf Github zu sichern. (was natürlich von Ihrer Meinung abweichen kann!)
Hugh Perkins
3
@ GregB Fallen Sie nicht in Paranoia! :] Sicher, die Verwendung von kennwortgeschützten Schlüsseln ist viel sicherer als die Verwendung von kennwortlosen Schlüsseln, aber die Behauptung, dass kennwortlose Schlüssel so einfach zu knacken sind wie das Speichern von Kennwörtern in einer Textdatei, ist offensichtlich falsch. Ich habe viele Anleitungen gesehen, die Benutzer dazu ermutigen, kennwortgeschützte Schlüssel zu verwenden, aber ich habe nie behauptet, dass die Verwendung ohne Kennwörter überhaupt nicht sicher ist. Plus: Einige Systeme unterstützen keine Lösungen zum Speichern des von Benutzern eingegebenen Schlüsselkennworts und fragen bei jeder Verwendung des Schlüssels danach. Das macht die Verwendung von SSH-Schlüsseln in dieser Situation sinnlos.
Trejder
4
Aus Gründen der Unterhaltung, die von der ursprünglichen Frage abgewichen ist, sind SSH-Schlüssel zwar kryptografisch sicherer als Kennwörter, diese Sicherheit ist jedoch gefährdet, wenn Sie Ihre SSH-Schlüssel nicht verschlüsseln. Mein persönlicher Ansatz ist es, meine Schlüssel zu Beginn des Tages mit einem SSH-Agenten zu entsperren, der dann die entschlüsselten Schlüssel im Speicher hält, damit ich das Passwort nicht den ganzen Tag über erneut eingeben muss. Wie @Hugh Perkins kommentiert und ich umschreibe, kennen Sie alle Ihre Sicherheitsanforderungen besser als ich / wir :).
GregB
38

Wenn Sie msysgit mit den OpenSSH-Tools verwenden, müssen Sie entweder ~/.ssh/id_rsaeine Git-Konfiguration erstellen oder eine solche erstellen , in ~/.ssh/configder auf Ihren Schlüssel verwiesen wird .

Hier ist ein Beispiel für eine Git-Konfiguration für Bitbucket, die den richtigen Benutzernamen und einen anderen als den Standardschlüssel verwendet (falls Sie einen Schlüssel für SSH-Verbindungen und einen anderen für Git-Konten verwalten).

~ / .ssh / config :

Host bitbucket.org
    Hostname bitbucket.org
    User git
    IdentityFile /C/keys/yourkey.key

In Git Bash können Sie zwei Befehle ausführen, um Ihren Schlüssel zum ssh-agent Ihrer aktuellen Sitzung hinzuzufügen, damit Sie das Kennwort des Schlüssels nicht wiederholt eingeben müssen.

eval `ssh-agent`
ssh-add /C/keys/yourkey.key
GregB
quelle
1
Ich tat dies aber für github.com: Host github.com IdentityFile ~ / .ssh / github_rsa
Sarah Vessels
1
Wenn Sie ein Leerzeichen in Ihrem Pfad haben, müssen Sie Anführungszeichen verwenden: IdentityFile "/ C / My Keys / key"
r03
Ich bevorzuge diesen Weg, weil dies mir erlaubte, existierende Schlüssel von einem anderen PC schnell zu verbinden
Kirill Gusyatin,
Meine .gitconfig hat Abschnitte. Unter welchen Abschnitten sollte ich diese Hosts platzieren?
Steve Yakovenko
16

Ich habe gerade% HOME% =% HOMEPATH% gesetzt

Dies hat den Vorteil, dass alle am System angemeldeten Benutzer arbeiten (sie erhalten jeweils separate .ssh-Ordner).

In Vista:

  1. Klicken Sie mit der rechten Maustaste auf Computer
  2. Wählen Sie Eigenschaften
  3. Klicken Sie auf Erweiterte Systemeinstellungen
  4. Klicken Sie auf Umgebungsvariablen
  5. Klicken Sie im unteren Bereich (Systemvariablen) auf Neu
  6. Geben Sie für Variablenname Folgendes ein: HOME
  7. Für variablen Pfadtyp:% HOMEPATH%
  8. OK klicken
Jono
quelle
6
In meinem Fall habe ich HOME =% USERPROFILE%
igor
1
Beachten Sie, dass %HOMEPATH%der Laufwerksbuchstabe nicht enthalten ist. Wenn Ihre Quelle nicht C:aktiviert ist C:, müssen Sie dem voranstellen %HOME%.
Graeme Perrow
set %HOME%=%HOMEPATH%arbeitete für mich! Danke!!
Teng
7

Ihr privater Schlüssel muss dem SSH-Agenten auf Ihrer Workstation hinzugefügt werden. Wie Sie dies erreichen, hängt möglicherweise davon ab, welchen Git-Client Sie verwenden. PuTTY und der zugehörige Agent (Festzug) können jedoch den Trick für Sie tun. Hier ist der Link zu den offiziellen Binärdateien und der Quelle:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Declan Shanaghy
quelle
Ich habe oben angegeben, dass ich Git für Windows verwende und ssh.exe (gepackt mit git) anstelle von putty verwende. Es muss eine übliche Vorgehensweise für das Hinzufügen eines privaten Schlüssels geben, ich kann nur scheinbar nicht herausfinden, wie. Das Wechseln der Software ermöglicht mir zwar, mich anzumelden, aber es muss eine Möglichkeit geben, dies mit dem Standard-Git-Setup zu tun, oder?
Binaryorganic
Sorry, ich arbeite nicht unter Windows, nur unter Linux. Der Schlüssel muss sich jedoch in Ihrem SSH-Agenten befinden. Gibt es eine agent.exe oder etwas in diese Richtung?
Declan Shanaghy
1
Ja, Setup war Kuchen auf der Linux-Seite. Aber leider muss es auch unter Windows funktionieren. Es gibt mehrere ausführbare ssh-Dateien im Ordner git / bin auf der Windows-Box (ssh, ssh-add, ssh-agent, ssh-keygen und ssh-keyscan), aber ich weiß nicht, wie ich sie erstellen soll tu irgendetwas. Sie blinken einfach ein cmd-Fenster auf und schließen sofort. Ich bin ratlos.
Binaryorganic
8
Pageant löst in der Tat das Problem für mich - ich habe eine Verknüpfung in meinem Startmenü-Ordner ( C:\Users\owen.blacker\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup), die darauf verweist "C:\Program Files (x86)\PuTTY\pageant.exe" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerPersonal.ppk" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerWork.ppk", dass meine SSH-Schlüssel beim Start geladen werden, und dies lässt GIT "einfach funktionieren": o)
Owen Blacker,
@OwenBlacker OMFG! Du solltest diesen Kommentar definitiv als Antwort in voller Größe schreiben ! Dies ist die einzige Lösung hier , die mir tatsächlich geholfen und mein Problem gelöst hat! Schade, dass ich dir nur +1 geben kann! :]
trejder
6

In meinem Fall habe ich Git für Windows im Docker-Container verwendet windowsservercore.

Mein Git wurde von Chocolatey zu installiert C:\Program Files\Git.

Ich musste die Datei folgendermaßen aktualisieren C:\Program Files\Git\etc\ssh\ssh_config:

Host example.com
   Identityfile ~/.ssh/id_rsa

Dann durfte ich Schlüssel von verwenden C:\Users\<user>\.ssh\id_rsa

Wenn Sie Git für Windows zusammen mit OpenSSH für Windows verwenden. Git benutzt immer noch einen eigenen ssh.

Plus , wenn Sie mit der Planung ssh-keyscan host.com > known_hostsvon OpenSSH, vorsichtig sein , da Rohrleitungen Ausgabe aus stdoutdem keyscan(unter Windows) ändert Kodierung UCS-2, aber OpenSSH lesen kann nur UTF-8! Stellen Sie also sicher, dass Sie die known_hostsDateicodierung ändern .

oglop
quelle
Dies hat geholfen, aber für alle, die einen id_dsa-Schlüssel verwenden, müssen Sie auch "PubkeyAcceptedKeyTypes ssh-dss" unter Ihrem Host hinzufügen.
Michael Russo
4

OK, ich habe mir den Vorschlag von angeschaut ..

Aber ich hielt es nicht für eine gute Idee, meine privaten SSH-Schlüssel in einem öffentlichen Ordner abzulegen, und fing an, nach dem bekannten Host zu suchen.

Wenn Sie also Ihren SSH-Schlüssel korrekt schützen möchten, müssen Sie ihn in das folgende Verzeichnis stellen:

Für Windows 7, 8 und 8.1 32-Bit:

C: \ Benutzer \\ AppData \ Local \ VirtualStore \ Programme \ Git \

Für Windows 7, 8 und 8.1 64-Bit:

C: \ Benutzer \\ AppData \ Local \ VirtualStore \ Programme (x86) \ Git \

Bas van den Dikkenberg
quelle
Dies war die einfachste Lösung auf meinem Win7-Rechner. Wie du habe ich gesucht known_hosts. Sicher genug, es war in C:\Users\Dave\AppData\Local\VirtualStore\Program Files (x86)\Git\.ssh. Indem ich meine Schlüsseldatei (id_rsa) in dieses Verzeichnis legte, konnte ssh sie ohne Beanstandung finden. Ich habe ein wenig gelesen - auf diese Weise behandelt Windows (ältere) Software, die versucht, in verbotene Bereiche zu schreiben (z. B. "C: \ Programme \"), sodass Gits ssh nicht weiß, dass in das VirtualStore-Verzeichnis Windows geschrieben wird geht das transparent an. Zumindest diese Dateien gehören einem Benutzer!
DaveGauer
4

Am effizientesten ist es, Pageant zu verwenden, da Sie die Passphrase nur einmal zu Beginn der Sitzung schreiben können, anstatt bei jedem Push. Alle Antworten hier waren zu kurz, daher werde ich hier eine ausführliche Anleitung veröffentlichen:

  1. Herunterladen pageant.exe, puttygen.exe, putty.exeund plink.exevon PuTTY Webseite. Legen Sie sie in das C:\puttyToolsVerzeichnis.
  2. Rennen puttygen.exe.
  3. Klicken Sie auf die Schaltfläche Generate.
  4. Wackeln Sie mit der Maus im oberen Teil des Fensters, bis der Fortschrittsbalken voll ist, wie das Programm Sie dazu auffordert.
  5. Geben Sie eine Passphrase ein und wiederholen Sie diese im nachfolgenden Textfeld.
  6. Klicken Sie auf "Privaten Schlüssel speichern". Das übliche Verzeichnis zum Speichern dieser Dateien ist %USERPROFILE%\_ssh(auf meinem Computer wird dies zugeordnet C:\Users\andres\.ssh\). Es spielt keine Rolle, wie Sie den Schlüssel nennen, aber zu Demonstrationszwecken werde ich ihn anrufen github.ppk. Diese Datei sollte die Erweiterung .ppk haben.
  7. Kopieren Sie den Text in das obere Textfeld in PuTTYgen, das mit "" gekennzeichnet ist, Public key for pasting into OpenSSH authorized_keys fileund fügen Sie ihn in einen neuen SSH-Schlüssel in den GitHub-Einstellungen ein. Geben Sie einen Titel ein, der beschreibt, auf welchem ​​Computer sich der Schlüssel befindet (z. B. "Arbeitslaptop").
  8. Ausführen pageant.exe, ein neues Systray-Symbol wird angezeigt.
  9. Klicken Sie mit der rechten Maustaste auf das Symbol -> Schlüssel hinzufügen.
  10. Suchen Sie Ihre ppk-Datei, geben Sie Ihre Passphrase ein.
  11. Erstellen Sie diese neuen Benutzerumgebungsvariablen (indem Sie Environüber WindowsMenu nach Anwendungen suchen, die gefunden werden Edit environment variables for your account): GIT_SSH = "C:\puttyTools\plink.exe"undSVN_SSH = "C:\puttyTools\PuTTY\plink.exe"
  12. Öffnen Sie putty.exe und versuchen Sie, eine Verbindung zu dem Host herzustellen, auf dem Sie Ihre Git-Repositorys hosten. Versuchen Sie beispielsweise, über SSH eine Verbindung zu github.com herzustellen. In einem Dialogfeld werden Sie gefragt, ob Sie den Fingerabdruck des Servers akzeptieren möchten: Klicken Sie auf JA.
  13. Führen Sie eine neue Instanz Ihrer MINGW64Git-Konsole aus und überprüfen Sie, ob die Umgebungsvariablen vorhanden sind, indem Sie den Befehl schreiben env | grep -i ssh.
  14. Sie sollten bereit sein. Versuchen Sie, mit dem Git + SSH-Protokoll von Ihrem Host zu klonen.

(Ursprünglich aus diesen beiden Handbüchern extrahiert, die ich in einem zusammengefasst habe: So richten Sie Git für Windows ein und konfigurieren MinGW-W64 + MSYS für die Verwendung von PuTTY Plink / Pageant .)

wissen
quelle
3

Wenn Sie GitHub für Windows und Git GUI für Windows mischen, können Probleme auftreten, bei denen Git GUI Sie immer wieder zur Eingabe eines Benutzernamens und eines Kennworts auffordert. Die Lösung hierfür besteht darin, die Remote-URL https:(die von GitHub für Windows erstellt wird) in das Git-Protokoll zu ändern . .gitSuchen Sie im Verzeichnis in der Konfigurationsdatei nach:

[remote "origin"]
   url = https://github.com/**username**/**reponame**.git
   fetch = +refs/heads/*:refs/remotes/origin/*

Ändern Sie es in:

[remote "origin"]
    url = [email protected]:**username**/**reponame**.git
    fetch = +refs/heads/*:refs/remotes/origin/*
IDisposable
quelle
Ja, es ist sehr ärgerlich. Es ist natürlich und einfach, ein Repo mit Github für Windows GUI zu klonen, aber wenn Git Cui außerhalb der Git Shell verwendet wird, schlägt dies fehl. Ich frage mich, wie der Befehl git in der git-Shell mit https url ...
hiroshi
für SSH ist das Präfix immer git@{SERVER URL}?
Nmz787
Ja, soweit ich je gesehen habe :)
IDisposable
Hatte das schon - fragt mich immer noch
Ian Grainger
3

Der Standardspeicherort für die Dateien ist in %USERPROFILE%\.ssh.

%USERPROFILE%ist das Äquivalent von $ HOME in Unix (normalerweise entspricht es so etwas c:\users\youruserid).

Wenn Sie die mit Git gelieferten SSH-Tools verwenden, die die Standardbefehlszeilen-Tools im Unix-Stil darstellen, können Sie hier so etwas wie mein Skript verwenden , um mit ssh-agent über alle Shells hinweg zu arbeiten.

Eric Blade
quelle
Für zukünftige Leser %USERPROFILE% is the equivalent of $HOMEist das nicht das Äquivalent von $HOME. Viele schlecht funktionierende Linux-Apps, die auf Windows portiert wurden, behandeln beide gleich, sollten aber nicht gleich behandelt werden.
Micah Zoltu
Micah, kannst du die unterschiedlichen Absichten dazu mitteilen? Auch mit anderer Absicht scheint es, dass wenn alle Werkzeuge eines als das andere verwenden, es dann nicht effektiv gleichwertig wird?
Eric Blade
Tools, die %USERPROFILE%unter Windows genauso verwendet werden wie $HOMEunter Linux, verstoßen gegen gut dokumentierte Best Practices / Empfehlungen für die Windows-Entwicklung (von MS vor langer Zeit veröffentlicht und im Laufe der Zeit aktualisiert). Es gibt viele Tools, die dies tun, aber das Argument, dem sie folgen, ähnelt dem Argument "X pinkelt im Pool, also sollten wir es auch." USERPROFILEist , wo der Benutzer Dokumente speichert sie erstellen / speichern (zB Speichern - Dialog). APPDATAist für benutzerspezifische Konfigurationsdaten. LOCALAPPDATAist für benutzerspezifische Caches und große Dateien gedacht. PROGRAMDATAist für die maschinenweite Konfiguration und den Cache.
Micah Zoltu
Im Allgemeinen sind die einzigen Tools, die sich mit USERPROFILE schlecht verhalten, Tools, die von Linux-Entwicklern geschrieben und dann nach Windows portiert wurden. Als Entwickler verwenden Sie wahrscheinlich viele davon, so dass es sich anfühlt, als ob "jeder es tut", aber außerhalb des Ökosystems der Entwicklungstools sind die meisten Windows-Anwendungen tatsächlich gute Bürger. Sogar Microsoft begeht manchmal den Fehler, Dinge nicht am richtigen Ort zu platzieren (es handelt sich um ein riesiges Unternehmen), obwohl sie sich im Allgemeinen bemühen, das Problem zu lösen und die Richtlinien des Betriebssystems zu befolgen, wenn Sie sie darauf hinweisen.
Micah Zoltu
1
(Sorry, StackExchange Zeichenbeschränkungen für Kommentare). Hier finden Sie weitere Details zu den Ordnern und eine kurze Beschreibung der einzelnen Elemente. Es gibt auch andere Ressourcen, einschließlich mehr Blog-Posts mit Verbrauchsmaterialien, aber diese bietet die
höchste
2

Ich hatte ähnliche Probleme und keine der Antworten hier löste das Problem. Es stellte sich heraus, dass mein Schlüsselpaar ursprünglich mit einer leeren Passphrase generiert wurde. (Ich weiß, dumm.)

Nachdem ich ein neues Schlüsselpaar erstellt und den öffentlichen Schlüssel auf GitHub hochgeladen hatte, funktionierten die Dinge wieder.

Eric Cloninger
quelle
1
diese. ughhhhhhhhhhhh. Auf Wiedersehen 2 Stunden
Scoop
1

Die folgende Antwort gilt auch für diese Frage, wenn Sie ssh über das Windows-Dienstkonto ausführen: Jenkins (Windows-Dienst) mit Git über SSH

Alexander Pacha
quelle
Nach dem von Ihnen angegebenen Link konnte ich mein Jenkins-Setup abrufen. Ich musste die Umgebungsvariable HOME auf den Git-Programmpfad setzen, in dem sich das SSH-Verzeichnis befand, in dem ich meinen SSH-Schlüssel erstellt hatte.
Spechal,
1

Sie können sowohl den Pfad zum Schlüssel als auch den Namen der Schlüsseldatei wie folgt angeben (unter Ubuntu). Zum Beispiel:

ssh -i /home/joe/.ssh/eui_rsa
Jim
quelle
Dies löst das Problem auf jeden Fall und ermöglicht es Ihnen, Ihre Schlüssel zu speichern, wo immer Sie möchten.
DaveGauer
Die Frage betraf speziell Fenster. Ich habe Git auf meinem Ubuntu-Rechner, der so funktioniert, aber ich kann nicht sagen, was ich GIT_SSH_COMMANDauf meinem Windows-Rechner einstellen soll .
mjaggard
1

Pageant (ein SSH-Agent, der mit dem PuTTY-Bundle geliefert wird ) löst das Problem für mich.

Ich habe eine Verknüpfung im Startup-Ordner ( C:\Users\owen.blacker\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup) meines Startmenüs, die darauf verweist "C:\Program Files (x86)\PuTTY\pageant.exe" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerPersonal.ppk" "C:\Users\owen.blacker\Documents\SSH\OwenBlackerWork.ppk", dass meine SSH-Schlüssel beim Start geladen werden und Git dadurch "einfach funktioniert": o)

Owen Blacker
quelle
4
Ich denke, dass Sie mehrere andere Einstellungen benötigen, damit dies funktioniert (wie zum Beispiel GIT_SSH, das auf TortoisePLink.exe gesetzt ist, denke ich?), Und obwohl es in der Vergangenheit bei mir funktioniert hat, bekomme ich häufig Probleme mit anderen Computern. :-(
Simon East
Ich erhalte "Kann die Datei nicht öffnen" von Pageant :( Was ich weiß, ist richtig eingerichtet, da ich es für TortoiseGit verwende :(
Ian Grainger
1

Viele Antworten sagen das, aber für mich nicht schnell genug!

in Windows mit msys (Standard Windows Konsole) C:\Users\{you}\.ssh\id_rsa

Grundsätzlich stört es nicht, installierte Schlüssel zu scannen (zumindest nicht auf meinem neuen Laptop) und muss daher speziell überprüft werden id_rsa

Ich bin auf dieses Problem gestoßen, als ich einige private Arbeitsrepos in Ruby MSYS CLI für Windows 10 64-Bit klonen wollte

MrMesees
quelle
0

Wenn Sie mit Windows 7/8 arbeiten, sollten Sie in C: \ Users \ Your_User_Name.ssh nachsehen. Kopieren Sie einfach Ihre id_rsa-Datei und fügen Sie sie hier ein.

eeree
quelle
0

Ein Fehler, den ich bei der Verwendung von SSH unter Windows gemacht habe, war, dass bei dem Versuch, die Schlüssel über den Git Bash-Client zu verwenden, alle Dateien in ~ / .ssh die falschen Berechtigungen hatten, aber es wurde nicht versucht, mir mitzuteilen, dass es sich um eine handelt Problem.

Stellen Sie als Test sicher, dass Sie alles in Ihrem ~ / .ssh-Verzeichnis auf chmod 600 eingestellt haben.

Verschütten
quelle
0

Wenn Sie über die erforderlichen Berechtigungen auf dem Windows-Computer verfügen und Ihre Richtlinien dies zulassen, empfehle ich die Installation von Cygwin ( https://cygwin.com/ ), insbesondere, wenn Sie bereits Erfahrung mit Linux haben. Cygwin macht es möglich, Ihre SSH-Schlüssel wie auf jedem anderen Linux / Unix-Rechner zu behandeln. Und es bietet Zugriff auf fast alle CLI-Tools von Linux.

torbenl
quelle
1
Es ist durchaus sinnvoll, solche Vorschläge als Kommentare zu machen. Da die Frage jedoch ausdrücklich nach git for windows fragt, sollten Sie damit rechnen, dass die Stimmen für das Posten dieser Antwort nach unten gehen.
Rob
0

In TortoiseGit können Sie den Schlüssel angeben, der beim Klonen eines Repositorys verwendet werden soll. Aktivieren Sie einfach "Load Putty Key" und navigieren Sie zu der .ppkDatei, wie im Screenshot gezeigt:https://i.stack.imgur.com/lAyzT.png

NGNeer
quelle
Wenn deaktiviert, überprüfen Sie Settings... -> Network -> SSH clientaufC:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
Nikita Bosik
0

Ich habe das obige Problem durch Erstellen behoben

~ / .ssh / config

ablegen und ablegen:

IdentityFile C:\Users\adria\.ssh\mysshkey
Adrian Onu
quelle
0

Wenn Sie Ihren Kommentar zu Declans Antwort lesen, versuchen Sie zunächst, eine Eingabeaufforderung zu öffnen (Start → Ausführencmd ), und navigieren Sie dann zu diesem Git / Bin-Ordner, und führen Sie ihn aus ssh-keygen. Theoretisch wird dadurch ein RSA-Schlüssel generiert und in das entsprechende Verzeichnis gestellt. Dann müssen Sie es nur noch finden und Ihren öffentlichen Schlüssel mit der Welt teilen.

Der Grund, warum das Fenster "blinkt", ist, dass Windows das Programm ausführt und wenn es ausgeführt wird, die Eingabeaufforderung schließt und denkt, dass Sie damit fertig sind, wenn Sie die Ausgabe wirklich benötigen.

naydichev
quelle
0

Unter Verwendung von Git Gui v0.17 unter Windows habe ich den folgenden Menübefehl angeklickt: HilfeSSH-Schlüssel anzeigen .

Ein Dialogfeld mit dem Titel Ihr OpenSSH Public Key wurde angezeigt . Ich habe einen Schlüssel generiert und in die Zwischenablage kopiert. Dann folgte ich ab Schritt 3 den Anweisungen von setup-ssh auf githelp . Danach hat Git Gui lautlos mit GitHub kommuniziert - es müssen keine Anmeldeinformationen eingegeben werden.

snow6oy
quelle
0

Auf meinem Windows 7-System sucht Git Gui nach dem RSA-Schlüssel im userprofile/.sshOrdner oder genauer c:/users/yourusername/.ssh/.

Der schwierige Teil meines Setups war, den gemeinsam genutzten Host bei Hostmonster zu veranlassen, den Schlüssel zu akzeptieren. Die einzige Möglichkeit, um es zum Laufen zu bringen, bestand darin, mit Git Gui die Schlüsselpaare (ohne Kennwort) zu erstellen und dann den öffentlichen Schlüssel über das Bedienfeld ssh zu kopieren und einzufügen und die Schlüssel zu verwalten.

Um am Anfang zu starten, müssen Sie die Schlüssel in Git Gui erstellen , indem Sie auf Menü Hilfe , zeigen SSH - Schlüssel , dann Schlüssel generieren . Jetzt haben Sie zwei neue Schlüssel im .sshVerzeichnis. Öffnen Sie die .pubDatei und kopieren Sie den Inhalt.

Melden Sie sich auf dem freigegebenen Host in Ihrem Control Panel an und rufen Sie SSH , SSH-Schlüssel verwalten und Schlüssel importieren auf . Fügen Sie es in die öffentliche Box ein und vergewissern Sie sich, dass Sie den richtigen Namen ohne die Erweiterung angegeben haben id_rsa. Jetzt müssen Sie den Schlüssel über den Link zum Verwalten der Autorisierung autorisieren, damit er in die authorized_keysDatei eingebunden wird.

Jetzt sollten Ihr Git Gui und Ihr Git Bash in der Lage sein, mit SSH zu pushen, ohne dass Sie das Passwort eingeben müssen. Seltsamerweise war ich in der Lage, SSH über Git Bash und Git Gui zu verwenden. Auf meinen eigenen Servern mit Linux war das Shared Hosting genau das Richtige für mich. Ich hoffe, dass dies jemandem hilft, da ich Stunden des Versuchs und Irrtums gebraucht habe, um dies zu finden - und es ist so einfach!

user228414
quelle
0

Wenn Sie die Git-Befehlszeile für Windows verwenden, können Sie wie folgt vorgehen:

Öffnen cmd.exeund ausführen setx HOME c:\PATH_TO_PRIVATE_KEY.

Erstellen Sie einen neuen Ordner,, .ssh(falls nicht vorhanden) c:\PATH_TO_PRIVATE_KEYund kopieren Sie Ihre id_rsaDatei (Ihren privaten Schlüssel) hinein.

Getan. Jetzt können Sie die Git-Befehlszeile normal verwenden.

duccom
quelle
0

Meiner Erfahrung nach ist OpenSSL / Bash Git in msysgit (nicht PuTTYs Plink), dass die Suchreihenfolge für Ihren .ssh/Ordner wie folgt lautet.

  1. %HOME%/.ssh/
  2. %HOMEDRIVE%%HOMEPATH%/.ssh/
  3. %USERPROFILE%/.ssh/

Deshalb schlagen so viele Leute vor, eine Einstellung vorzunehmen, HOMEwenn eine der anderen nicht Ihren Erwartungen entspricht. Noch wichtiger ist, können Sie selbst überprüfen; Debuggen der Verwendung ssh -vauf einem Server, der die Authentifizierung mit öffentlichem Schlüssel verwendet, wie folgt:

$ ssh -v [email protected]
OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
debug1: Reading configuration data /d/.ssh/config
...
debug1: identity file /d/.ssh/identity type -1
debug1: identity file /d/.ssh/id_rsa type 1
debug1: identity file /d/.ssh/id_dsa type -1
...
debug1: Next authentication method: publickey
debug1: Trying private key: /d/.ssh/identity
debug1: Offering public key: /d/.ssh/id_rsa
..
Hi kcd83! You've successfully authenticated, but GitHub does not provide shell access.

Wir fanden die sshSuche auf einem dunklen Laufwerk und keine der vorherigen Antworten schien zu erklären, was wir sahen.

Manchmal %HOMEDRIVE%%HOMEPATH%ist ein zugeordnetes Netzlaufwerk (zB H:/) , die unnötigen Ausfälle verursacht , wenn es Netzwerk / File - Server Probleme, selbst wenn %USERPROFILE%/.sshist C:/Users/Username/.sshund hat die lokal Tasten. Einstellung %HOME%zur %USERPROFILE%stoppt es an der Remote Home - Laufwerk suchen.

KCD
quelle
0

Sie können auch PuTTY Agent (Pageant) laden und den privaten Schlüssel hinzufügen, den Sie mit PuTTY für den Server generiert haben.

Git erkennt dies und nutzt es für Push / Pull.

deepakkt
quelle
0

Ich habe TortoiseGit und Git Bash unter Windows verwendet, je nach Bedarf. Ich habe alles zu TortoiseGit hinzugefügt, und es hat gut funktioniert, aber Git Bash hat es nicht abgerufen, obwohl sich die Schlüssel im richtigen Verzeichnis befanden. Es stellte sich heraus, dass ich das von Git Bash machen musste:

ssh-add C:\\Users\\<YOUR_USER>\\.ssh\\id_rsa

Sie können den Pfad natürlich auch dahin ändern, wo sich Ihr Schlüssel befindet, und sich daran erinnern, ihn \\als Trennzeichen zu verwenden.

Vlad Schnakovszki
quelle
0

Wenn Sie Git für Windows verwenden, müssen Sie nach dem Generieren der SSH-Schlüssel Ihren SSH-Schlüssel zu ssh-agent hinzufügen.

Siehe Neuen SSH-Schlüssel generieren und zum ssh-agent hinzufügen .

eval $(ssh-agent -s)

// Tell where the keys are located

ssh-add ~/.ssh/id_rsa
Matoeil
quelle
Willkommen bei Serverfehler. Diese Frage hat bereits vor einigen Jahren eine allgemein akzeptierte Antwort erhalten. Suchen Sie nach neueren Fragen oder Fragen, die erheblich verbessert werden können.
Matthew Wetmore
1
Die allgemein akzeptierte Antwort hat bei mir nicht funktioniert, während dies der Fall war. Ich glaube, es könnte jemandem helfen, zu wissen, dass der Schlüssel dem SSH-Agenten hinzugefügt werden muss, und es kann mit zwei Zeilen Anweisungen geschehen
Matoeil