Chapters ā–¾ 2nd Edition

4.4 Git pƄ servern - Konvigurera servern

Konvigurera servern

LƄt oss gƄ ingeom hur man konfigurerar SSH-Ƅtkomst pƄ serversidan. I detta exemplet kommer du anvƤnda metoden med authorized_keys fƶr att autentisera dina anvƤndare. Vi antar ocksƄ att du anvƤnder en vanlig Linuxdistribution som till exempel Ubuntu.

Notera

Mycket av det som beskrivs hƤr kan automatiseras genom att anvƤnda kommandot ssh-copy-id, istƤllet fƶr att manuellt kopiera och installera publika nycklar.

Fƶrst skapar du ett anvƤndarkonto som heter git och en .ssh-katalog fƶr den anvƤndaren.

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

DƤrefter behƶver du lƤgga till nĆ„gra utvecklares publika SSH-nycklar till filen authorized_keys fƶr git-anvƤndaren. Antag att du har nĆ„gra betrodda publika nycklar och har sparat dem i temporƤra filer. ƅterigen, de publika nycklarna ser ut ungefƤr sĆ„hƤr:

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

Du bara lƤgger till dem i git-anvƤndarens authorized_keys-fil som finns i .ssh-katalogen:

$ 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

Nu kan du konfigurera ett tomt repo fƶr dem genom att kƶra git init med --bare flaggan, vilket initialiserar repot utan arbetskatalog:

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

Sedan kan John, Josie eller Jessica skicka upp fƶrsta versionen av deras projekt in i det repot genom att lƤgga till det som ett fjƤrrepo och skicka upp en gren. Notera att nƄgon mƄste logga in pƄ maskinen via skalet och skapa ett bart remo varje gƄng du vill lƤgga till ett projekt. LƄt oss anvƤnda gitserver som vƤrdnamnet pƄ server pƄ vilken du konfigurerat git-anvƤndaren och repot. Om du kƶr det internt och sƤtter upp en DNS fƶr gitserver till att peka pƄ den servern sƄ kan du anvƤnda kommandona nƤstan rakt av (under antagandet att myproject Ƥr ett existerande projekt med filer i):

# on John's computer
$ 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

Nu kan andra klona ner det och skicka Ƥndringar tillbaks precis lika lƤtt:

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

Med denna metoden kan du snabbt fƄ upp en lƤs- och skrivbar Gitserver fƶr en handfull utvecklare.

Man bƶr ocksƄ notera att alla dessa anvƤndare Ƥven kan logga in pƄ servern och kƶra ett skal som git-anvƤndaren. Om du vill begrƤnsa det mƄste du Ƥndra skalet till nƄgot annat i filen /etc/passwd.

Du kan enkelt begrƤnsa git-anvƤndarkontot till bara Git-relaterade aktiviteter med ett begrƤnsat skalverktyg som heter git-shell som kommer med Git. Om du sƤtter detta som git-anvƤndarens inloggningsskal, kan anvƤndaren inte har normal skalƄtkomst till din server. Fƶr att anvƤnda detta, specificera git-shell istƤllet fƶr bash eller csh fƶr det anvƤndarkontots inloggningsskal. Fƶr att gƶra det mƄste du fƶrst lƤgga till den fullstƤndiga sƶkvƤgen till git-shell i /etc/shells om det inte redan stƄr dƤr:

$ cat /etc/shells   # se om `git-shell` redan finns dƤr. Om inte
$ which git-shell   # sƤkerstƤll att git-shell Ƥr installerat pƄ ditt system.
$ sudo -e /etc/shells  # Och lƤgg till sƶkvƤgen till git-shell frƄn fƶregƄende kommando

Nu kan du Ƥndra skalet fƶr en anvƤndare genom att anvƤnda chsh <anvƤndarnamn> -s <skal>:

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

Nu kan git-anvƤndaren bara anvƤnda SSH-anslutningen fƶr att skicka och hƤmta Gitrepon och kan inte anvƤnda skalet pƄ din maskin. Om du fƶrsƶker kommer du se ett meddelande om fƶrhindrad inloggning som detta:

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

Nu kommer Gits nƤtverkskommandon fungera precis som vanligt, men anvƤndare kan inte fƄ ett skal. Precis som meddelandet gƶr gƤllande kan du ocksƄ konfigrera en katalog i git-anvƤndarens hemkatalog fƶr att skrƤddarsy git-shell kommandot lite grann. Till exempel kan du begrƤnsa Gitkommandon som servern accepterar eller sƄ kan du skrƤddarsy meddelandet som anvƤndare ser om de fƶrsƶker logga in ƶver SSH. Kƶr git help shell fƶr mer information om att skrƤddarsy skalet.

scroll-to-top