Frage an clone, git, gitolite – Gitolite: Hinzufügen von Benutzern funktioniert nicht und VERWEIGERT von fallthru beim Klonen als root?

5

Ich habe es geschafft, ein leeres Git-Repo auf meinem NAS zu erstellen, und ich habe versucht, einen neuen Benutzer hinzuzufügen, indem ich einen neuen öffentlichen Schlüssel "foo.pub" erstellt und in keydir / kopiert + eingefügt und diesen festgeschrieben und auf den NAS übertragen habe .

Erstens, die Dateien:

Hier ist meine ~ / .ssh / config-Datei:

Host root
    HostName iptonas
    User root
    Port 123        

Host foo
    HostName iptonas
    User foo
    Port 123
    identityfile ~/.ssh/foo

Besorgte eine Kopie von gitolite-admin von NAS:

git clone ssh://root/gitolite-admin

Ich bekomme:

Cloning into 'gitolite-admin'...
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (12/12), done.
Resolving deltas: 100% (1/1), done.

Hier ist meine gitolite.conf-Datei:

repo gitolite-admin
    RW+     =   git

repo testing
    RW+     =   @all

repo newrepo
    RW+     =   foo
    RW+     =   bar

Als ich meine Kopie von gitolite-admin unter Verwendung von:

git push root:gitolite-admin

Ich bekomme:

Counting objects: 10, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 1.02 KiB, done.
Total 6 (delta 0), reused 0 (delta 0)
remote: Initialized empty Git repository in /root/repositories/newrepo.git/
To root:gitolite-admin
   897113c..e7e2daf  master -> master

Nun, wenn ich versuche, auf das neue Repo zu pushen

Wenn ich versuche zu rennen:

git clone foo:newrepo

Ich bekomme:

Cloning into 'newrepo'...
[email protected]'s password: 
fatal: 'newrepo' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

Wenn ich versuche zu rennen:

git clone root:newrepo

Ich bekomme:

Cloning into 'newrepo'...
FATAL: R any newrepo git DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexpectedly

Ich bin nicht sicher, was ich falsch mache?

Ich folge diesen Anweisungen:http://www.nineproductions.com/linux/53-gitolite-hosting.html Klicken Sie unter "Hinzufügen von Repositorys und Benutzern" auf

Deine Antwort

1   die antwort
11

In diesen Anweisungen wird das Klonen mit einem Benutzer erwähnt, der aid_rsa.pub Schlüssel, der bei der Installation von Gitolite verwendet wird.

Also, Ihr Konto muss in seinem haben~/.ssh dasid_rsa undid_rsa.pub Schlüssel, die von Gitolite bei der Deklaration der 'git'user (der einzige, der klonen kanngitolite-admin repo).

Um nun einen Benutzer hinzuzufügen, müssen Sie diesen Benutzer nicht nur in dergitolite.conf Datei (was Sie getan haben), müssen Sie auch seinen öffentlichen Schlüssel zum lokalen hinzufügengitolite-admin repo 'keys' Verzeichnis.

Ich bitte Steve Franko, ein neues öffentliches / privates Schlüsselpaar mit zu generieren. ”ssh-keygen -t dsa”Ich bitte Steve Franko, mir den PUBLIC-Schlüssel zu schicken, den er gerade generiert hatIch benenne den öffentlichen Schlüssel von umid_dsa.pub zusfranko.pubIch kopiere diesfranko.pub Schlüssel in diegitolite-admin/keydir Verzeichnis

Wenn Sie beide Vorgänge ausführen, bevor Sie zurückschiebengitolite-admin, dann deklariert Gitolite diesen neuen Benutzer und Ihrengit clone foo:newrepo wird funktionieren.

Beachten Sie, dass, wenn Sie die Gitolite-Installation mit dem durchgeführt habengit Wie ich bereits empfohlen habe, solltest du folgendes in deiner Konfigurationsdatei haben:

Host git
    HostName iptonas
    User git
    Port 123
    Identityfile ~/.ssh/git

Und geh agit clone git:gitolite-admin.

Die einzige Zeit, die Sie sehen / verwenden solltenroot befindet sich zu Beginn der Installation auf der Serverseite, um die zu deklarieren / hinzuzufügengit Konto.
Danach empfehle ich Ihnen wirklich, nicht zu verwenden / zu sehenroot überall in Ihrem Prozess.

Eigentlich habe ich zwei Schlüsselsätze generiert, also meine~/.ssh Ordner hat derzeit:id_rsa, id_rsa.pub, id_foo, id_foo.pub

Ihre~/.ssh Ordner sollte enthalten:

git, git.pub, id_foo, id_foo.pub

Gitolite stützt seinen Autorisierungsmechanismus auf eine Authentifizierung nach dem Namen des öffentlichen Schlüssels.

Nochmals: Auf der Serverseite müssen Sie die Installation von gitolite als Benutzer wie 'git' ausführen, mit dem Argument a/tmp/git.pub (nicht/tmp/id_rsa.pub)

Fassen wir noch einmal zusammen, denn hier herrscht große Verwirrung.Gitolite basiert auf ssh.
Das heißt, Sie benötigen einen Account (hier 'git') auf der Serverseite (der Ihr Gitolite-Server sein wird), in dem a~git/.ssh/authorized_keys Die Datei zeichnet alle öffentlichen Schlüssel des Gitolite-Administrators / Benutzers auf.

Auf der Clientseite (Ihr Benutzer foo) müssen Sie (zumindest für Ihren ersten Benutzer) die öffentlichen und privaten Schlüssel von git und die von foo haben.

Ihre~foo/.ssh/config Datei enthält:

Host gitadmin
    HostName iptonas
    User git
    Port 123        
    identityfile ~/.ssh/git

Host foo
    HostName iptonas
    User git
    Port 123
    identityfile ~/.ssh/foo

Beachten Sie, dass der Benutzer fürJede SSH-Kommunikation ist immer git! Sie erreichen den Gitolite-Server immer über eine SSH-Adresse wiessh://[email protected]:123/arepo.
Da Sie jedoch mehrere SSH-Schlüssel zur Auswahl haben, können Sie stattdessen Folgendes eingeben:

git clone gitadmin:gitolite-admin, odergit clone foo:newRepo

Mit dem ersten Befehl können Sie das klonengitolite-admin repo (weil du das mit öffentlichen und privaten ssh-schlüsseln von git machst, damit du die rechte dazu hast).
Sie können diesen lokalen Klon verwenden, um ihn zu platzierenfoo.pub in demkeys Verzeichnis und deklarieren anewRepo in demconfig Datei.
Dann drückst du das Repo zurück (und Gitolite macht seine Magie, erstellt ein neues Repo und fügt den Inhalt von hinzufoo.pub zu~git/.ssh/authorized_keys für Sie mit einem erzwungenen Befehlsskript, um alle von ssh ausgegebenen Befehle abzufangenfoo).

(Ich bevorzuge es, diese ssh-Verknüpfung zu benennen. 'gitadmin'anstelle von git, auch wenn die öffentlichen / privaten Schlüssel benannt sind'git.xxx', da 'gitadmin'vermittelt besser dieAbsicht der ssh Befehle, die Sie damit machen werden: Sie werden Git-Zugriffsrechte verwalten)

Mit dem zweiten Befehl können Sie IhrenewRepo und daran zu arbeiten.

Beachten Sie, dass:

ssh gitadmin, oderssh foo

Zeigt die Gitolite-Version und die Rechte an, die mit den SSH-Schlüsseln verbunden sind, die von den jeweiligen SSH-Verknüpfungen verwendet werden.gitadmin' und 'foo', wie in der~foo/.ssh/config Datei.

Bisher habe ich alle Anweisungen befolgt. Obwohl ich mit dem Benutzer gitadmin (ehemals 'git') klonen / pushen kann, kann ich mit dem von mir hinzugefügten Benutzer 'foo' immer noch nicht klonen / pushen. Es gibt foo.pub in keydir / und sie werden als Benutzer unter dem "testing" -Repo in gitolite.conf hinzugefügt. Wenn ich jedoch versuche, "git clone foo: testing" auszuführen, erhalte ich immer noch eine Anfrage nach foo's pw und dann diese Zeile: "Konnte nicht in das Home-Verzeichnis / var / services / homes / foo chdir: Keine solche Datei oder Verzeichnis fatal: 'testing' scheint kein git repository zu sein fatal: Das entfernte Ende hat unerwartet aufgelegt ". Jay
@Jay> "Ich wurde nach gits Pw gefragt": Sie müssen nicht gefragt werdengitPasswort von. Wenn der Server (~git/.ssh/authorized_keys) enthält den öffentlichen git-Schlüssel in einer Zeile mit einem vorangestelltencommand=...), und wenn der Client (von dem aus Sie klonen oder pushen) a~/.ssh/config Datei mit dem RechtIdentityfile ~/.ssh/git Direktive (dh Sie haben sowohl private als auch öffentliche Schlüssel für diegit Konto, entsprechend benannt 'git' und 'git.pub'), Sie werden nicht nach einem Passwort gefragt. VonC
@ Jay: Tut Ihr~foo/.ssh Enthält die öffentlichen / privaten SSH-Schlüsselfoo.pub, foo, git.pub undgit? Und einconfig Datei mit dem in meiner Antwort genannten Inhalt? Diese Konfigurationsdatei sollte auf Benutzer verweisen. 'git' immer. Nur auf der Serverseite (wo SSH-Operationen durchgeführt werden)/var/services/homes/git existiert. Tut Ihrgitolite-admin/keys Verzeichnis (innerhalb des lokalen Klons vongitolite-admin enthaltengit.pub undfoo.pub? Können Sie Ihre Frage mit dem Inhalt von bearbeiten?gitolite-admin/conf/gitolite.conf Datei? VonC
Eigentlich konnte ich das alles für den User "git" fein machen. Aber ich versuche 1) den Benutzer "foo" auf meinem Computer einzurichten (da der Benutzer, den ich auf meinem Computer haben möchte, weder "root" noch "git", sondern "foo" ist) und 2) einen neuen einzurichten repo "newrepo". Ich habe die Datei foo.pub zu gitolite-admin / keydir hinzugefügt und gitolite-admin / gitolite.conf bearbeitet, sodass es "repo newrepo" mit "RW + = foo" gibt. Dann sshe ich als root, tippe "su - foo", "vi .profile" und füge diese Zeilen in Schritt 4 von "Configure the Git Hosting User’s Profile and Home Directory", "source .profile", hinzu. Jay

Verwandte Fragen