Pergunta sobre clone, git, gitolite – Gitolite: adicionando usuário não funcionando, e NEGADO pelo fallthru quando clonando como root?

5

Eu consegui iniciar um reit git vazio no meu NAS, e tentei adicionar um novo usuário gerando uma nova chave pública "foo.pub" e copiando + colando em keydir / e confirmando isso e empurrando-o para o NAS .

Primeiro, os arquivos:

Aqui está o meu arquivo ~ / .ssh / config:

Host root
    HostName iptonas
    User root
    Port 123        

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

Peguei uma cópia do gitolite-admin do NAS:

git clone ssh://root/gitolite-admin

Eu recebo:

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.

Aqui está o meu arquivo gitolite.conf:

repo gitolite-admin
    RW+     =   git

repo testing
    RW+     =   @all

repo newrepo
    RW+     =   foo
    RW+     =   bar

Quando eu empurrei minha cópia do gitolite-admin usando:

git push root:gitolite-admin

Eu recebo:

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

Agora, quando tento empurrar para o novo repo

Quando tento executar:

git clone foo:newrepo

Eu recebo:

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

Quando tento executar:

git clone root:newrepo

Eu recebo:

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

Não tenho certeza do que estou fazendo de errado?

Eu estou seguindo estas instruções:http://www.nineproductions.com/linux/53-gitolite-hosting.html Em "Adicionando Repositórios e Usuários"

Sua resposta

1   a resposta
11

id_rsa.pub chave usada ao instalar o Gitolite.

Então, sua conta deve ter em sua~/.ssh aid_rsa eid_rsa.pub chaves usadas pelo gitolite ao declarar o 'git'usuário (que é o único capaz de clonargitolite-admin repo).

Agora, para adicionar um usuário, você não precisa apenas declarar o dito usuário nogitolite.conf arquivo (o que você fez), você também tem que adicionar sua chave pública para o localgitolite-admin repo 'keys'diretório.

Peço a Steve Franko para gerar um novo par de chaves pública / privada usando ”ssh-keygen -t dsa”Peço a Steve Franko para me enviar a chave pública que acabou de gerarEu renomeio a chave pública deid_dsa.pub parasfranko.pubEu copio osfranko.pub chave para ogitolite-admin/keydir diretório

Se você fizer essas duas operações antes de empurrar de voltagitolite-admin, então o Gitolite irá declarar esse novo usuário, e seugit clone foo:newrepo vai funcionar.

Note que se você fez a instalação Gitolite com ogit conta como eu recomendei antes, você deve ter em seu arquivo de configuração:

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

E vai umgit clone git:gitolite-admin.

A única vez que você deve ver / usarroot está no início da instalação no lado do servidor, a fim de declarar / adicionar ogit conta.
Depois disso, eu realmente recomendo que você não use / vejaroot em qualquer parte do seu processo.

Na verdade, eu criei dois conjuntos de chaves, então meu~/.ssh pasta atualmente tem:id_rsa, id_rsa.pub, id_foo, id_foo.pub

Seu~/.ssh pasta deve conter:

git, git.pub, id_foo, id_foo.pub

Gitolite baseia seu mecanismo de autorização em uma autenticação feita após o nome da chave pública.

Novamente: no lado do servidor, você deve fazer a instalação do gitolite como um usuário como 'git', com um argumento a/tmp/git.pub (não/tmp/id_rsa.pub)

Vamos recapitular porque há muita confusão aqui.Gitolite é baseado em ssh.
Isso significa que você precisa de uma conta (aqui 'git') no lado do servidor (que será o seu servidor Gitolite), em que um~git/.ssh/authorized_keys O arquivo registrará todas as chaves públicas admin / users do Gitolite.

No lado do cliente (seu usuário foo), você precisa ter (pelo menos para o seu primeiro usuário) as chaves públicas e privadas do git e as do foo.

Seu~foo/.ssh/config arquivo conterá:

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

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

Note que o usuário paraqualquer comunicação ssh é sempre git! Você sempre entra em contato com o servidor Gitolite através de um endereço ssh comossh://[email protected]:123/arepo.
Exceto que, como você tem várias chaves SSH para escolher, você pode digitar:

git clone gitadmin:gitolite-adminougit clone foo:newRepo

O primeiro comando permitirá que você clonegitolite-admin repo (porque você faz isso usando git public e private ssh keys, então você tem o direito de fazer isso).
Você pode usar esse clone local para colocarfoo.pub nokeys diretório e declarar umnewRepo noconfig Arquivo.
Então você empurra de volta esse repo (e Gitolite faz sua mágica, criando um novo repo, adicionando o conteúdo defoo.pub para~git/.ssh/authorized_keys para você, com um script de comando forçado para interceptar quaisquer comandos ssh emitidos porfoo).

(Eu prefiro nomear esse atalho ssh 'gitadmin'em vez de git, mesmo se as chaves pública / privada forem nomeadas'git.xxx', Porque 'gitadmin'melhor transmite ointenção dos comandos ssh que você fará com ele: você administrará direitos de acesso ao git)

O segundo comando permite clonar seunewRepo e trabalhar nisso.

Observe que:

ssh gitadminoussh foo

exibirá a versão do gitolite e os direitos associados às chaves ssh usadas por cada atalho do sshgitadmin'e'foo', conforme definido no~foo/.ssh/config Arquivo.

Eu também tentei "git clone foo: newrepo" e ainda estou recebendo "Clonar em 'newrepo' ... fatal: 'newrepo' não parece ser um repositório git fatal: O final remoto desligou inesperadamente". Existe uma maneira de eu verificar quais repositórios realmente existem no NAS? Jay
@Jay esta etapa deve ser feita para a conta do git, não para a conta foo. Você precisa de um diretório ~ git / bin. VonC
@Jay responder editado. VonC
@Jay: O seu~foo/.ssh contém as chaves ssh públicas / privadasfoo.pub, foo, git.pub egit? E umconfig arquivo com o conteúdo mencionado na minha resposta? Esse arquivo de configuração deve fazer referência ao usuáriogit' sempre. No lado do servidor (onde as operações do ssh são feitas), somente/var/services/homes/git existe. Seugitolite-admin/keys diretório (dentro do clone local degitolite-admin contergit.pub efoo.pub? Você pode editar sua pergunta com o conteúdo degitolite-admin/conf/gitolite.conf Arquivo? VonC

Perguntas relacionadas