Zum Inhalt springen

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.

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.git

Sie finden die Adresse eines Repositories außerdem über die Schaltfläche Clone in der Weboberfläche Ihrer Instanz.

  1. Hinterlegen Sie Ihren öffentlichen SSH-Schlüssel in Ihrem Benutzerprofil der Instanz unter Benutzereinstellungen > SSH / GPG keys. Siehe Ihren ersten Git-Service erstellen.

  2. Erlauben Sie ausgehenden Datenverkehr zu 213.17.16.145 auf Port 22, falls Ihr Netzwerk ausgehende Verbindungen einschränkt.

  3. Hinterlegen Sie den Host Key von ssh.git.onstackit.cloud, falls Ihre Systeme Host Keys prüfen. Der Fingerprint lautet SHA256: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:

Terminal-Fenster
ssh-keyscan ssh.git.onstackit.cloud >> ~/.ssh/known_hosts

Vergleichen Sie das Ergebnis vor der Verwendung mit dem Fingerprint aus Schritt 3:

Terminal-Fenster
ssh-keyscan ssh.git.onstackit.cloud | ssh-keygen -lf -
Terminal-Fenster
git clone ssh://git@ssh.git.onstackit.cloud/<instance>/<owner>/<repository>.git

So prüfen Sie die Verbindung, ohne zu klonen:

Terminal-Fenster
git ls-remote ssh://git@ssh.git.onstackit.cloud/<instance>/<owner>/<repository>.git

Repository 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:

Terminal-Fenster
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“

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 yes

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:

Terminal-Fenster
git config core.sshCommand "ssh -i ~/.ssh/<your key> -o IdentitiesOnly=yes"

Ü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:

Terminal-Fenster
git config --global url."ssh://git@ssh.git.onstackit.cloud/<instance>/".insteadOf "ssh://git@ssh.<instance>.git.onstackit.cloud/"

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.

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.

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.

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.

ssh: Could not resolve hostname ssh.<instance>.git.onstackit.cloud

Das Repository verwendet weiterhin die bisherige Adresse. Aktualisieren Sie das Remote wie in Repository mit der bisherigen Adresse aktualisieren beschrieben.

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.

Host key verification failed

Der 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.