Git
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