Git
Chapters ▾ 2nd Edition

4.4 Git sa Server - Pag-Setup ng Server

Pag-Setup ng Server

Talakayin natin ang pag-set up ng access sa SSH sa panig ng server. Sa halimbawa na ito, gagamitin mo ang authorized_keys na paraan para sa pagpapatunay sa iyong mga gumagamit. Ipinapalagay din namin na nagpapatakbo ka ng isang karaniwang distribusyon ng Linux tulad ng Ubuntu.

Ang karamihan sa inilarawan dito ay maaaring ma-automate sa pamamagitan ng paggamit sa ssh-copy-id na utos, sa halip na manu-manong pag-kopya at pag-install sa mga pampublikong susi.

Una, maglikha ka ng isang git na user at isang .ssh na direktoryo para sa gumagamit na iyon.

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

Sunod, kailangan mong magdagdag ng ilang pampublikong susi ng SSH para sa developer sa authorized_keys na file para sa git na user. Ipinapalagay namin na ikaw ay mayroong mga pinagkakatiwalaang na mga pampublikong susi at nai-save ang mga ito sa mga pansamantalang file. Muli, ang mga pampublikong susi ay mukhang ganito:

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

I-append mo lamang sila sa authorized_keys file ng git na user sa kanilang .ssh na direktoryo.

$ 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

Ngayon, maari kang mag-set up ng isang repositoryo na walang laman para sa kanila sa pamamagitan ng pagpapatakbo ng git init kasama ang --bare na opsyon, na nagsisimula sa isang repositoryo na walang gumagana na direktoryo:

$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Nasimulan ang isang walang laman na Git na repositoryo sa /srv/git/project.git/

Pagkatapos, Si John, Josie, o Jessica ay maaaring mag-push sa unang bersyon ng kanilang project papasok o sa repositoryo sa pamamagitan ng pagdagdag nito bilang isang remote at pag-push ng isang branch. Tandaan na ang isang tao ay dapat mag-shell sa isang makina at maglikha ng isang payak na repositoryo sa bawat oras na gusto mo magdagdag ng isang proyekto. Gamitin natin ang ang gitserver bilang hostname ng server na saan na-setup mo ang iyong git na user at ang repositoryo. Kapag pinapatakbo mo ito internally, at nakapag-set up ng DNS para sa gitserver upang ituro ang server na iyon, maaari mong gamitin ang mga utos as is (ipinapalagay na ang myproject ay isang umiiral na proyekto na may mga file sa loob nito):

# sa Kompyuter ni John
$ 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

Sa puntong ito, maaaring i-clone ito ng iba at i-push ang mga pagbabago nang kasing simple ng:

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

Sa pamamaraan na ito, madali mong mapapatakbo ang isang pagbasa/pagsulat na Git server para sa kaunting mga developer.

Dapat mong tandaan na sa ngayon lahat ng mga gumagamit ay maaaring mag-login sa server at makakuha ng shell bilang isang git na gumaagamit. Kung nais mong paghigpitan iyon, kailangan mong baguhin ang shell sa ibang bagay sa passwd na file.

Madali mong mahigpitan ang git na user sa paggawa lamang ng mga gawain sa Git kasama ang isang limitado na shell na kagamitan na tawag ay git-shell na kasama sa Git. Kapag nai-set mo ito bilang login shell ng iyong git na user, kung gayon ang git na user ay hindi magkakaroon ng karaniwang access sa shell sa iyong server. Upang gamitin ito, tukuyin ang git-shell sa halip sa bash or csh para sa login shell ng gumagamit: Upang gawin ito, dapat mo munang idagdag ang git-shell sa /etc/shells kung wala pa roon:

$ 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

Ngayon ay maaari mo ng i-edit ang shell para sa user sa pamamagitan ng chsh <username> -s <shell>:

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

Ngayon, ang git na user ay maaari lamang mag-push at mag-pull ng mga repositoryo sa Git gamit ang koneksyon sa SSH at hindi maaaring mag shell sa ibang makina. Kung susubukan mo, makikita mo ang isang pagtanggi sa login tulad nito:

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

Ngayon ang mga utos sa Git network ay gumagana parin ng maayos ngunit ang mga gumagamit ay hindi makakakuha ng isang shell. Gaya ng nakalagay sa output, maaari kang mag-setup ng isang direktoryo sa direktoryo sa home ng isang git na user na i-customize ng kaunti sa git-shell na utos. Isang halimbawa, maaari mong mahigpitan ang mga utos ng Git na tinatanggap ng iyong server o maaari mong i-customize ang mensahe na makikita sa mga gumagamit kung susubukan nilang mag-SSH tulad niyan. Ipatakbo ang git help shell para sa karagdagan impormasyon sa pag-customize sa shell.