Git - Verbindung zu Ihren Repositories über SSH
Zuletzt aktualisiert am
Alle STACKIT Git Instanzen verwenden eine gemeinsame SSH-Adresse. Der Name Ihrer Instanz ist das erste Element im Pfad des Repositories.
Adresse eines Repositories
Abschnitt betitelt „Adresse eines Repositories“ssh://git@ssh.git.onstackit.cloud/<instance>/<owner>/<repository>.git<instance> ist der Name Ihrer Git Instanz und zugleich der erste Teil ihrer Web-Adresse. Für die Instanz example.git.onstackit.cloud und das Repository my-team/my-service lautet die Adresse:
ssh://git@ssh.git.onstackit.cloud/example/my-team/my-service.gitSie finden die Adresse eines Repositories außerdem über die Schaltfläche Clone in der Weboberfläche Ihrer Instanz.
Netzwerk und Client vorbereiten
Abschnitt betitelt „Netzwerk und Client vorbereiten“-
Hinterlegen Sie Ihren öffentlichen SSH-Schlüssel in Ihrem Benutzerprofil der Instanz unter Benutzereinstellungen > SSH / GPG keys. Siehe Ihren ersten Git-Service erstellen.
-
Erlauben Sie ausgehenden Datenverkehr zu
213.17.16.145auf Port22, falls Ihr Netzwerk ausgehende Verbindungen einschränkt. -
Hinterlegen Sie den Host Key von
ssh.git.onstackit.cloud, falls Ihre Systeme Host Keys prüfen. Der Fingerprint lautetSHA256:I4jgl6ALgx5qOWwpQVC2M613dV7R0Wy6LfQQ5LQKwR4(ED25519).
Die IP-Allowlist Ihrer Instanz gilt auch für SSH. Ein Client außerhalb der erlaubten Bereiche wird mit einer Meldung abgewiesen, die den Grund benennt.
So hinterlegen Sie den Host Key auf einem System ohne interaktive Eingabe, zum Beispiel auf einem Build-Agent:
ssh-keyscan ssh.git.onstackit.cloud >> ~/.ssh/known_hostsVergleichen Sie das Ergebnis vor der Verwendung mit dem Fingerprint aus Schritt 3:
ssh-keyscan ssh.git.onstackit.cloud | ssh-keygen -lf -Repository klonen
Abschnitt betitelt „Repository klonen“git clone ssh://git@ssh.git.onstackit.cloud/<instance>/<owner>/<repository>.gitSo prüfen Sie die Verbindung, ohne zu klonen:
git ls-remote ssh://git@ssh.git.onstackit.cloud/<instance>/<owner>/<repository>.gitRepository mit der bisherigen Adresse aktualisieren
Abschnitt betitelt „Repository mit der bisherigen Adresse aktualisieren“Repositories, die mit der Adresse git@ssh.<instance>.git.onstackit.cloud:<owner>/<repository>.git geklont wurden, müssen auf die gemeinsame Adresse umgestellt werden. Führen Sie in jedem Repository diesen Befehl aus:
git remote set-url origin "$(git remote get-url origin | sed -E 's#^(ssh://)?git@ssh\.([^.]+)\.git\.onstackit\.cloud[:/]#ssh://git@ssh.git.onstackit.cloud/\2/#')"Prüfen Sie das Ergebnis mit git remote -v und wiederholen Sie den Schritt für jedes Remote des Repositories, nicht nur für origin.
Setups aktualisieren, in denen die Adresse hinterlegt ist
Abschnitt betitelt „Setups aktualisieren, in denen die Adresse hinterlegt ist“Ihre SSH-Konfiguration
Abschnitt betitelt „Ihre SSH-Konfiguration“Ein Eintrag in ~/.ssh/config, der den bisherigen Host nennt, greift nicht mehr, da alle Instanzen denselben Hostnamen verwenden. Ersetzen Sie ihn durch einen Eintrag für ssh.git.onstackit.cloud:
Host ssh.git.onstackit.cloud User git IdentityFile ~/.ssh/<your key> IdentitiesOnly yesMehrere SSH-Schlüssel
Abschnitt betitelt „Mehrere SSH-Schlüssel“Ihr Client bietet einen SSH-Schlüssel an, und dieser Schlüssel muss in der Instanz hinterlegt sein, zu der Sie sich verbinden. IdentitiesOnly yes im Eintrag aus Ihre SSH-Konfiguration sorgt dafür, dass Ihr Client den benannten Schlüssel anbietet und nicht alle ihm bekannten Schlüssel.
Wenn Sie je Instanz einen anderen Schlüssel verwenden, reicht ein Eintrag nicht aus, da der Hostname die Instanz nicht mehr identifiziert. Wählen Sie den Schlüssel stattdessen im jeweiligen Repository aus:
git config core.sshCommand "ssh -i ~/.ssh/<your key> -o IdentitiesOnly=yes"Build-Pipelines und Automatisierung
Abschnitt betitelt „Build-Pipelines und Automatisierung“Überall dort, wo eine Pipeline, ein Job oder ein Skript die Adresse eines Repositories enthält, stellen Sie diese auf die gemeinsame Adresse um. Zusätzlich benötigt der Agent, der den Job ausführt, die drei Punkte aus Netzwerk und Client vorbereiten: einen hinterlegten Schlüssel, ausgehenden Zugriff auf Adresse und Port sowie den Host Key in seiner known_hosts-Datei.
Wenn ein System Adressen umschreibt, statt sie zu speichern, behalten Sie die Umschreibung bei und ändern Sie ihr Ziel:
git config --global url."ssh://git@ssh.git.onstackit.cloud/<instance>/".insteadOf "ssh://git@ssh.<instance>.git.onstackit.cloud/"Deployment-Werkzeuge und GitOps
Abschnitt betitelt „Deployment-Werkzeuge und GitOps“Werkzeuge, die sich mit eigenen hinterlegten Zugangsdaten verbinden, zum Beispiel ein Deployment-Werkzeug, das ein Cluster aus einem Repository synchronisiert, enthalten sowohl die Adresse als auch einen Host-Key-Eintrag. Stellen Sie die Adresse um, ersetzen Sie den Host-Key-Eintrag und hinterlegen Sie den Schlüssel, den das Werkzeug verwendet, in Ihrer Instanz, falls er dort noch nicht hinterlegt ist.
Infrastructure as Code
Abschnitt betitelt „Infrastructure as Code“Die Quelle eines Moduls, die über SSH auf ein Repository verweist, enthält die Adresse in ihrer Deklaration, zum Beispiel:
git::ssh://git@ssh.git.onstackit.cloud/<instance>/<owner>/<repository>.git//<module path>?ref=<tag>Durchsuchen Sie Ihre Konfiguration nach dem bisherigen Hostnamen, um alle Vorkommen zu finden.
Repository-Mirrors
Abschnitt betitelt „Repository-Mirrors“Ein Mirror, der Daten in Ihr STACKIT Git Repository überträgt oder daraus abruft, enthält die Adresse in dem System, das ihn ausführt. Stellen Sie die Adresse dort um. Mirrors, die innerhalb von STACKIT Git konfiguriert sind und auf ein externes System verweisen, sind nicht betroffen.
Fehlermeldungen und ihre Bedeutung
Abschnitt betitelt „Fehlermeldungen und ihre Bedeutung“Der Zugriff auf eine Instanz wird abgelehnt
Abschnitt betitelt „Der Zugriff auf eine Instanz wird abgelehnt“access denied for instance <instance>Ihr Client hat einen SSH-Schlüssel angeboten, der in dieser Instanz nicht hinterlegt ist, oder die Adresse Ihres Clients liegt nicht in der IP-Allowlist der Instanz. Listen Sie Ihre lokalen Schlüssel mit ssh-add -l auf, vergleichen Sie diese mit den Schlüsseln unter Benutzereinstellungen > SSH / GPG keys Ihrer Instanz und wählen Sie den hinterlegten Schlüssel wie in Mehrere SSH-Schlüssel beschrieben aus.
Steht in der Meldung der Besitzer Ihres Repositories statt Ihrer Instanz, enthält die Adresse kein Instanz-Element, und der Besitzer wird als Name der Instanz gelesen. Verwenden Sie das Format der Adresse aus Adresse eines Repositories.
Der Hostname kann nicht aufgelöst werden
Abschnitt betitelt „Der Hostname kann nicht aufgelöst werden“ssh: Could not resolve hostname ssh.<instance>.git.onstackit.cloudDas Repository verwendet weiterhin die bisherige Adresse. Aktualisieren Sie das Remote wie in Repository mit der bisherigen Adresse aktualisieren beschrieben.
Der öffentliche Schlüssel wird abgelehnt
Abschnitt betitelt „Der öffentliche Schlüssel wird abgelehnt“git@ssh.<instance>.git.onstackit.cloud: Permission denied (publickey)Der angebotene SSH-Schlüssel ist in der Instanz nicht hinterlegt, und die Instanz ist weiterhin unter ihrer eigenen Adresse erreichbar. Hinterlegen Sie den Schlüssel in Ihrem Benutzerprofil oder wählen Sie einen hinterlegten Schlüssel aus.
Der Host Key kann nicht geprüft werden
Abschnitt betitelt „Der Host Key kann nicht geprüft werden“Host key verification failedDer Host Key von ssh.git.onstackit.cloud fehlt in der known_hosts-Datei des Systems, auf dem Sie den Befehl ausführen. Hinterlegen Sie den Host Key wie in Netzwerk und Client vorbereiten beschrieben.