Chapters ▾ 2nd Edition

4.4 Git on the Server - Die Bediener Opstel (Setting Up the Server)

Die Bediener Opstel (Setting Up the Server)

Kom ons stap deur die opstel van SSH-toegang aan die bedienerkant (server side). In hierdie voorbeeld sal jy die authorized_keys metode gebruik om jou gebruikers te verifieer (authenticate). Ons aanvaar ook dat jy 'n standaard Linux-verspreiding (distribution) soos Ubuntu laat loop.

Note

'n Goeie deel van wat hier beskryf word, kan geautomatiseer word deur die ssh-copy-id opdrag te gebruik, in plaas van om publieke sleutels handmatig te kopieer en te installeer.

Eerstens skep jy 'n git gebruikersrekening en 'n .ssh gids (directory) vir daardie gebruiker.

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

Vervolgens moet jy 'n paar publieke SSH-sleutels van ontwikkelaars by die authorized_keys lêer vir die git gebruiker voeg. Kom ons aanvaar jy het 'n paar weggesteekte publieke sleutels en het hulle in tydelike lêers gestoor. Weereens lyk die publieke sleutels min of meer so:

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

Jy voeg hulle eenvoudig by die git gebruiker se authorized_keys lêer in sy .ssh gids:

$ 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

Nou kan jy 'n leë bewaarplek (repository) vir hulle opstel deur git init uit te voer met die --bare opsie, wat die bewaarplek initialiseer sonder 'n werkgids (working directory):

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

Dan kan John, Josie of Jessica die eerste weergawe van hul projek in daardie bewaarplek push deur dit as 'n remote by te voeg en 'n tak (branch) op te stuur. Let daarop dat iemand op die masjien moet inlog (shell onto) en 'n kale bewaarplek (bare repository) moet skep elk liewe keer as jy 'n projek wil byvoeg. Kom ons gebruik gitserver as die gasheernaam (hostname) van die bediener waarop jy jou git gebruiker en bewaarplek opgestel het. Als jy dit intern laat loop, en jy stel DNS op vir gitserver om na daardie bediener te wys, dan kan jy die opdragte prakties ongewysig gebruik (met die veronderstelling dat myproject 'n bestaande projek met lêers daarin is):

# 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

Op hierdie punt kan die grotes dit net so maklik afhaal (clone) en veranderings terug push:

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

Met hierdie metode kan jy vinnig 'n lees/skryf Git-bediener aan die gang kry vir 'n handjievol ontwikkelaars.

Jy moet let op die feit dat al hierdie gebruikers tans ook by die bediener kan aanmeld en 'n dop (shell) as die git gebruiker kan kry. As jy dit wil beperk, sal jy die dop na iets anders in die /etc/passwd lêer moet verander.

Jy kan die git gebruikersrekening maklik beperk tot slegs Git-verwante aktiwiteite met 'n beperkte dop-nutsding (limited shell tool) genaamd git-shell wat saam met Git kom. As jy dit as die git gebruikersrekening se aantekendop (login shell) stel, dan kan daardie rekening nie normale doptoegang tot jou bediener hê nie. Om dit te gebruik, spesifiseer git-shell in plaas van bash of csh vir daardie rekening se aantekendop. Om dit te doen, moet jy eers die volle padnaam van die git-shell opdrag by /etc/shells voeg as dit nie reeds daar is nie:

$ 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 -e /etc/shells  # and add the path to git-shell from last command

Nou kan jy die dop vir 'n gebruiker wysig deur chsh <username> -s <shell> te gebruik:

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

Nou kan die git gebruiker steeds die SSH-verbinding gebruik om Git-bewaarplekke te push en pull, maar kan nie op die masjien 'n dop oopmaak nie. As jy dit probeer, sal jy 'n aanmeldingsweigering soos hierdie sien:

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

Op hierdie punt kan gebruikers steeds SSH-poortaanleiding (port forwarding) gebruik om toegang te verkry tot enige gasheer wat die git-bediener kan bereik. As jy dit wil voorkom, kan jy die authorized_keys lêer wysig en die volgende opsies vooraf voeg by elke sleutel wat jy wil beperk:

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

Die resultaat behoort so te lyk:

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

Nou sal Git-netwerkopdragte steeds perfek werk, maar die gebruikers sal nie 'n dop kan kry nie. Soos die afvoer aandui, kan jy ook 'n gids opstel in die git gebruiker se tuisgids (home directory) wat die git-shell opdrag 'n bietjie aanpas. Jy kan byvoorbeeld die Git-opdragte wat die bediener sal aanvaar beperk, of jy kan die boodskap aanpas wat gebruikers sien as hulle probeer om so via SSH aan te meld. Voer git help shell uit vir meer inligting oor die aanpassing van die dop.