verschiedene SSH-Keys in VSCode?

RockNLol

Lieutenant
Registriert
Aug. 2008
Beiträge
814
Ich hoffe, das ist das richtige Unterforum für diese Frage.
Ich habe auf meinem lokalen gitea-Server zwei verschiedene Accounts mit verschiedenen email-Adressen. Einen für private Projekte und einen für die Uni.
Mit dieser Anleitung hier habe ich jeweils einen SSH-Key verifiziert: https://www.techaddressed.com/tutorials/add-verify-ssh-keys-gitea/

verwendet wird aber immer nur der SSH-Key, den ich in der ~/.ssh/config Datei angebe:

Code:
Host git.meinserver.local
  User gitea
  Port 22
  PreferredAuthentications publickey
  IdentityFile "C:\Users\user\.ssh\gitea_id_privat"
//bzw.
  IdentityFile "C:\Users\user\.ssh\gitea_id_uni"

Habt ihr eine Idee, wie ich in VSCode angeben kann, welcher Key für welchen Workspace zu verwenden ist?
Beste Grüße
RockNLol
 
SSH wählt anhand des Bezeichners hinter "Host" den Configeintrag aus, der zum Hostnamen beim Connect passt. Da kannst du aber grundsätzlich beliebige Sachen hinschreiben und im jeweiligen Configblock dann via "HostName" auf den echten Host verweisen. Ob das jetzt auch im Kontext von git klappt, weiß ich allerdings nicht, einfach mal testen.

Jeder Config in der "Host"-Zeile einen eindeutigen Bezeichner geben. Je Configblock "HostName" mit dem korrekten Hostnamen eintragen und dann nen git clone gegen beide "Host"-Bezeichner fahren. Allerdings steht dann als remote dieser Bezeichner in deinem lokalen git drin und nicht der echte Hostname. Ohne die Config bekommst du das dann nicht gepushed/pulled. Heißt auch, die breits geklonten Repos lokal entweder wegwerfen und neu clonen oder manuell die remotes anpassen.

Dazu hier noch ein Link: https://gist.github.com/jexchan/2351996
 
  • Gefällt mir
Reaktionen: madmax2010 und RockNLol
OK, das ist eigentlich eine recht elegante Lösung. Danke!
 
Das Matching passiert halt über den Host bzw. den gesetzten Alias. Wenn du da unterscheiden willst, kannst du einfach weitere Aliase setzen.
Code:
Host git.meinserver.local git.meinserver.local--privat git--privat
  User gitea
  Port 22
  PreferredAuthentications publickey
  IdentityFile "C:\Users\user\.ssh\gitea_id_privat"

Host git.meinserver.local--uni git--uni
  User gitea
  Port 22
  PreferredAuthentications publickey
  IdentityFile "C:\Users\user\.ssh\gitea_id_uni"
Was dann entscheidet ist worauf du dich verbindest. Und hierbei kannst du dich auch auf nen Alias verbinden - in obigem Beispiel also auch via ssh git--privat oder ssh git--uni.
 
  • Gefällt mir
Reaktionen: madmax2010, KillerCow und RockNLol
git clone hat mit dem Alias super geklappt (privates repo, müsste also authentifiziert haben),
nun synct mein VSCode aber leider nicht:
Code:
ssh: Could not resolve hostname git-uni: Temporary failure in name resolution
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
so sieht die .ssh/config aus:
Code:
Host git-uni
  HostName gitea.meinserver.local
  User gitea
  Port 22
  PreferredAuthentications publickey
  IdentityFile "C:\Users\user\.ssh\keys\gitea_id_uni"

hat wer eine Idee, warum das beim git push nicht verwendet wird?
 
RockNLol schrieb:
Could not resolve hostname git-uni
Vielleicht deswegen?
Wie ist denn der FQDN Deines Hosts?
Edit: Sorry, steht ja in der nächsten Zeile Deiner config….
so wie es aussieht, wird der Name hinter „Host“ verwendet, und nicht die HostName Zeile
 
FQDN ist gitea.meinserver.local, git-uni ist aber der Alias, der ja bei git clone auch funktioniert hat.
 
Pushst Du mit der Git Erweiterung von VSCode oder mit “git push“ in der Command line?
 
Sowohl clone als auch push mit dem Source Control Reiter auf der linken Seite.

*edit: git push in der Konsole hat den gleichen output.
 
Code:
origin  gitea@git-uni:gituser1/repo.git (fetch)
origin  gitea@git-uni:gituser1/repo.git (push)
 
Meines Erachtens muss das der FQDN stehen, mir ist nicht bekannt das git was anderes macht als stumpf den zu verwenden.
 
wenn ich da den FQDN hinschreibe, verwendet er ja nicht den richtigen ssh-key.
 
Ja schon klar, verstehe Dein Problem. Aber die Fehlermeldung ist halt leider recht eindeutig. Da es sich ja um Deine private Infrastruktur handelt, verstehe ich allerdings auch nicht ganz, welchen Gewinn Du Dir mit zwei verschiedenen private Keys versprichst. Ich muss aber auch zugeben, das ich gitea noch nicht verwendet habe
 
Ich will eine klare Trennung zwischen meinem privaten User und meinem Uni-User. Ich hätte nicht gedacht, dass das so eine odyssee ist, ich bin sicher nicht der Erste mit dem Problem.

Mittlerweile hab ich auch threads auf anderen Seiten gefunden, die die Lösung genau so beschreiben, wie @KillerCow und @Yuuri vorgeschlagen haben. Es sollte also eigentlich funktionieren, tut es aber nicht.

gitea hat mit dem Problem noch nichts zu tun. git verwendet aus irgendeinem Grund die .ssh/config nicht für git push, für git clone aber schon.
 
  • Gefällt mir
Reaktionen: KitKat::new()
Ein Problem bei Windows ist, das es, je nach git Paket welches man installiert, die mit einem eigenen ssh client kommen. Ich nutze für solche Tools daher schon seit langem überwiegend WSL.
 
  • Gefällt mir
Reaktionen: RockNLol
WSL! Das war das Stichwort!
Das Projekt, das ich synchronisieren wollte läuft in WSL und dann nutzt vscode das ssh aus dem WSL container. Da war natürlich nix davon konfiguriert.

Hab jetzt keys und config in den container kopiert und jetzt klappts.
Danke!
 
  • Gefällt mir
Reaktionen: TomH22
RockNLol schrieb:
War jetzt eher Zufall, ich wollte Dich eigentlich überreden es mit WSL zu versuchen.
Ich mag Windows als GUI, aber als Kommando Shell für Entwicklung ist es ein Krampf, besonders wenn man aus der Unix Welt stammende Tools verwenden will.
In Deinem Fall war es jetzt aber nicht die Schuld von Windows.
 
Zurück
Oben