Git
Chapters ▾ 2nd Edition

4.4 Git na strežniku - Nastavitev strežnika

Nastavitev strežnika

Pojdimo skozi nastavitve dostopa SSH na strežniški strani. V tem primeru boste uporabili metodo authorized_keys za overitev vaših uporabnikov. Predpostavljamo tudi, da poganjate standardno distribucijo Linux-a kot je Ubuntu. Najprej ustvarite uporabnika git in direktorij .ssh za tega uporabnika.

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

Naslednje morate dodati nekaj razvijalskih javnih ključev SSH v datoteko authorized_keys za uporabnika git. Predpostavimo, da imate nekaj zaupljivih javnih ključev in imate nekaj njih v začasnih datotekah. Ponovno, javni ključi izgledajo nekako takole:

$ 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 pripnete jih k git uporabnikovi datoteki authorized_keys v njegovem direktoriju .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

Sedaj lahko nastavite prazen repozitorij zanje s pogonom git init z opcijo --bare, ki inicializira repozitorij brez delovnega direktorija:

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

Nato lahko John, Josie ali Jessica porinejo prvo verzijo njihovega projekta v ta repozitorij z njegovim dodajanjem kot daljave in porivanjem veje. Velja opomniti, da se mora nekdo prijaviti preko lupine v napravo in ustvariti goli repozitorij vsakič, ko želite dodati projekt. Uporabimo gitserver kot ime gostitelja strežnika na katerem ste nastavili vašega uporabnika git in repozitorij. Če ga poganjate interno in ste nastavili DNS za gitserver, da kaže na ta strežnik, potem lahko uporabite ukaze precej kot so (ob predpostavki, da je myproject obstoječi projekt z datotekami v njem):

# on Johns 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

Na tej točki lahko ostali klonirajo in porivajo spremembe nazaj prav tako enostavno:

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

S to metodo lahko hitro dobite bralno/pisalni strežnik Git delujoč in poganjan za peščico razvijalcev.

Opomniti je potrebno, da trenutno se lahko vsi ti uporabniki lahko tudi prijavijo v strežnik in dobijo lupino kot uporabnik git. Če želite to omejiti, boste morali spremeniti lupino na nekaj drugega v datoteki passwd.

Enostavno lahko omejite uporabnika git, da dela samo aktivnosti Git z omejenim orodjem lupine imenovanim git-shell, ki prihaja z Git-om. Če ste to nastavili kot vašo git uporabniško prijavno lupino, potem uporabnik git ne more imeti običajnega dostopa lupine na vaš strežnik. Da to uporabite, določite git-shell namesto bash ali csh za vašo lopino uporabnikove prijave. Da to naredite, morate najprej dodati git-shell v /etc/shells, če še ni tam:

$ 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

Sedaj lahko urejate lupino za uporabnika z uporabo chsh <username>:

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

Sedaj lahko uporabnik git uporablja samo povezave SSH, da poriva in potegne repozitorije Git in se ne more prijaviti preko lupine v napravo. Če poskusite, boste videli zavrnitev prijave sledeče:

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

Sedaj bodo omrežni ukazi Git še vedno delovali popolnoma v redu, vendar uporabniki ne bodo morali dobiti lupine. Kot trdi izpis, lahko tudi nastavite direktorij v git uporabnikov domači direktorij, ki malenkost prilagaja ukaz git-shell. Na primer, lahko omejite ukaze Git, ki jih bo strežnik sprejemal ali pa lahko prilagodite sporočilo, ki ga uporabniki vidiijo, če se tako poskusijo prijaviti preko SSH. Poženite git help shell za več informacij o prilagoditvi lupine.