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