Git
Chapters ▾ 2nd Edition

4.4 Git on the Server - Podešavanje servera

Podešavanje servera

Prođimo kroz podešavanje SSH pristupa na serverskoj strani. U ovom primeru, koristićete authorized_keys metodu za autentifikaciju svojih korisnika. Pretpostavljamo i da imate standardnu Linuks distribuciju kao što je Ubuntu. Prvo, kreirate korisnika git i .ssh direktorijum za tog korisnika.

$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

Zatim dodate neke javne SSH ključeve developera u datoteku authorized_kezy za korisnika git. Pretpostavimo da imate neke javne ključeve kojima verujete i da ste ih sačuvaji u privremenim datotekama. Opet, javni ključevi izgledaju nekako ovako.

$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair

Samo ih dodajte na datoteku authorized_keys korisnika git u njegovom direktorijumu .ssh:

$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys

Sada možete da podesite prazan repozitorijum za njega pokretanjem komande git init uz opciju --bare, što će inicijalizovati repozitorijum ne praveći pritom radni direktorijum:

$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /opt/git/project.git/

Onda, Džom, Džozi i Džesika mogu da gurnu prvu verziju svog projekta na taj repozitorijum tako što će ga dodati kao udaljeni repozitorijum i gurnuti granu. Obratite pažnju na to da neko mora da iskoristi šel da dopre do mašine i napravi goli repozitorijum svaki put kada dodajete novi projekat. Koristićemo gitserver kao ime hosta servera na kome su podešeni korisnik git i repozitorijum. Ako ste ga podigli interno, i ako imate DNS za gitserver koji pokazuje na taj server, možete da koristite komande na uobičajen način (pod pretpostavkom da je myproject postojeći projekat sa datotekama u njemu):

# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/opt/git/project.git
$ git push origin master

Sada drugi mogu da kloniraju i guraju promene podjednako lako.

$ git clone git@gitserver:/opt/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master

Ovom metodom možete brzo da dobijete Git server sa dozvolom čitanja i upisa za nekoliko developera.

Treba da obratite pažnju na to da trenutno svi korisnici takođe mogu da se uloguju na server i uđu u šel kao korisnik git. Ako želite da ograničite to, moraćete da promenite šel u nešto drugo u datoteci passwd.

Lako možete ograničiti korisnika git da može raditi samo Git aktivnosti koristeći ograničeni šel alat koji se naziva git-shell koji dolazi uz Git. Ako podesite ovo kao login šel korisnika git, korisnik git neće imati klasičan pristup šelu na serveru. Da biste iskoristili ovo, treba da podesite git-shell umesto bash ili csh za korisnikov login šel. To možete učiniti tako što ćete prvo dodati git-shell u /etc/shells ako već nije tamo.

$ cat /etc/shells   # see if `git-shell` is already in there.  If not...
$ which git-shell   # make sure git-shell is installed on your system.
$ sudo vim /etc/shells  # and add the path to git-shell from last command

Sada možete izmeniti šel za korisnika pomoću komande chsh <username>:

$ sudo chsh git  # and enter the path to git-shell, usually: /usr/bin/git-shell

Korisnik git sada može da koristi SSH konekciju da gura i dovlači Git repozitorijume, ali nema pristup mašini preko klasičnog šela. Ako proba, videće poruku sličnu ovom:

$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.

Sada će Gitove mrežne komande i dalje raditi kako se očekuje, ali korisnici neće moći da pristupe šelu. Kako izlaz nalaže, možete i da podesite i direktorijum u početnom direktorijumu korisnika git malom izmenom komande git-shell. Na primer, možete ograničiti Git komande koje će server prihvatiti ili možete izmeniti poruku koju korisici vide kada pokušaju da se povežu preko SSH-a na taj način. Pokrenite git help shell za piše informacija o izmenama koje možete načiniti u šelu.