Git
Chapters ▾ 2nd Edition

4.4 Гит на серверу - Подешавање сервера

Подешавање сервера

Прођимо кроз подешавање SSH приступа на серверској страни. У овом примеру, користићете authorized_keys методу за аутентификацију својих корисника. Претпостављамо и да имате стандардну Линукс дистрибуцију као што је Убунту.

Белешка

Већи део овога што је приказано у овом одељку може да се аутоматизује употребом команде ssh-copy-id command, без потребе да ручно копирате и инсталирате јавне кључеве.

На почетку креирате git кориснички налог i .ssh директоријум за тог корисника.

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

Затим је потребно да додате неколико јавних SSH кључева програмера у фајл authorized_keys корисника git. Претпоставимо да имате неке јавне кључеве којима се верује и да сте их сачували у привремене фајлове. Опет, јавни кључеви изгледају некако овако:

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

Само их надовежите на постојећи садржај фајла authorized_keys корисника git у његовом .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

Сада за њих можете да подесите празан репозиторијум извршавањем команде git init уз опцију --bare, која иницијализује репозиторијум, а не креира радни директоријум:

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

Џон, Џоси или Џесика тада могу да гурну прву верзију свог пројекта на тај репозиторијум тако што ће га додати као удаљени репозиторијум и гурнути грану на њега. Обратите пажњу на то да неко мора искористити љуску за приступ машини и да направи огољени репозиторијум сваки пут када желите да додате нови пројекат. Користићемо gitserver као име хоста сервера на коме сте подесили git корисника и репозиторијум. Ако се интерно извршава и подесили сте DNS за gitserver тако да показује на тај сервер, команде онда можете да користите на уобичајен начин (под претпоставком да је пројекат myproject постоји и садржи неке фајлове):

# на Џоновом компјутеру
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master

Сада остали могу да клонирају и гурају промене подједнако лако:

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

Овом методом можете брзо да поставите и покренете Гит сервер са дозволом читања и уписа за неколико програмера.

Треба да обратите пажњу на то да тренутно сви корисници такође могу и да се пријаве на сервер и уђу у љуску као корисник git. Ако то желите да спречите, љуску ћете у фајлу passwd морати да промените на нешто друго.

git корисника ћете лако моћи да ограничите тако да му буду дозвољене само Гит активности користећи алат ограничене љуске под називом git-shell који долази уз програм Гит. Ако ово подесите као логин љуску корисника git, он неће имати класичан приступ серверу из љуске. То се ради тако што као корисникову логин љуску уместо bash или csh поставите git-shell. Најпре треба да у /etc/shells додате име потпуне путање git-shell команде ако се тамо већ не налази.

$ cat /etc/shells   # погледај да ли је `git-shell` већ тамо. Ако није...
$ which git-shell   # проверите да је git-shell инсталиран на ваш систем.
$ sudo -e /etc/shells  # па додајте из последње команде путању до git-shell

Сада можете изменити љуску за корисника командом chsh <име_корисника> -s <љуска>:

$ sudo chsh git -s $(which git-shell)

Сада корисник git још увек може да користи SSH конекцију да гура и повлачи Гит репозиторијуме, али нема приступ машини преко класичног љуске. Ако покуша, видеће поруку одбијања пријаве сличну овом:

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

У овом тренутку корисници још увек могу да користе SSH прослеђивање порта за приступ било ком хосту који је доступан са гит сервера. Ако то желите да спречите, можете да уредите фајл authorized_keys и да ставите следеће опције испред сваког кључа који желите да ограничите:

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty

Резултат би требало да изгледа овако:

$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair

no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...

Сада ће мрежне команде програма Гит и даље радити како се очекује, али корисници неће имати приступ љуски. Како излаз налаже, можете да подесите и директоријум у почетном директоријуму корисника git који донекле прилагођава команду git-shell. На пример, можете ограничити Гит команде које ће сервер прихватити, или можете изменити поруку коју корисници виде када покушају да се повежу преко SSH. За више информација о начину прилагођавања љуске, извршите git help shell.