This is an in-progress translation.
To help translate the book, please fork the book at GitHub and push your contributions.

De server instellen

Laten we het instellen van SSH toegang aan de server kant eens doorlopen. In dit voorbeeld zul je de authorized_keys methode gebruiken om je gebruikers te verifiëren. We gaan er ook vanuit dat je een standaard Linux distributie gebruikt zoals Ubuntu. Als eerste creëer je een ‘git’ gebruiker een een .ssh map voor die gebruiker.

$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh

Daarna moet je een aantal publieke SSH sleutels van ontwikkelaars aan het authorized_keys bestand toevoegen voor die gebruiker. Laten we aannemen dat je een aantal sleutels per e-mail ontvangen hebt en ze hebt opgeslagen in tijdelijke bestanden. Nogmaals, de sleutels zien er ongeveer zo uit:

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

Je voegt ze slechts toe aan je authorized_keys bestand:

$ 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 kun je een leeg repository voor ze instellen door git init uit te voeren met de --bare optie, wat het repository initialiseert zonder een werkmap:

$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git --bare init

Daarna kunnen John, Josie of Jessica de eerste versie van hun project in de repository pushen door het als een remote toe te voegen en naar een branch te pushen. Let op dat iemand met een shell op de machine zal moeten inloggen en een kale repository moet creëren, iedere keer als je een project wilt toevoegen. Laten we gitserver als hostnaam gebruiken voor de server waar je je ‘git’ gebruiker en repository hebt ingesteld. Als je het intern gaat draaien, en je de DNS instelt zodat gitserver naar die server wijst, dan kun je de commando’s vrijwel ongewijzigd gebruiken:

# op 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

Op dat punt kunnen de anderen het clonen en wijzigingen even gemakkelijk terug pushen:

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

Met deze methode kun je snel een lees/schrijf Git server draaiend krijgen voor een handvol ontwikkelaars.

Als een extra voorzorgsmaatregel kun je de ‘git’ gebruiker makkelijk beperken tot het doen van alleen Git activiteiten, met een gelimiteerde shell applicatie genaamd git-shell die bij Git geleverd wordt. Als je dit als login shell voor je ‘git’ gebruiker instelt, dan kan de ‘git’ gebruiker geen normale shell toegang hebben op je server. Specificeer git-shell in plaats van bash of csh voor je gebruikers login shell om dit te gebruiken. Om dit te doen zul je waarschijnlijk het /etc/passwd bestand aan moeten passen:

$ sudo vim /etc/passwd

Aan het einde zou je een regel moeten vinden die er ongeveer zo uit ziet:

git:x:1000:1000::/home/git:/bin/sh

Verander /bin/sh in /usr/bin/git-shell (of voer which git-shell uit om te zien waar het geïnstalleerd is). De regel moet er ongeveer zo uit zien:

git:x:1000:1000::/home/git:/usr/bin/git-shell

Nu kan de ‘git’ gebruiker de SSH connectie alleen gebruiken om Git repositories te pushen en te pullen, en niet om in te loggen in de machine. Als je het probeert zul je een login weigering zoals deze zien:

$ ssh git@gitserver
fatal: What do you think I am? A shell?
Connection to gitserver closed.