Git szerver létrehozása

Ebben a bejegyzésben egy Git szervert fogok létrehozni, ami egy Docker konténeren futó Debian Linuxon fog futni. A Git szervert ssh-n keresztül éri el, ezért kell egy ssh szerver, ami jelen esetben az openssh-server lesz. Telepítsük fel a szükséges csomagokat.

apt install openssh-server openssh-client openssh-known-hosts git

Ha sudo-zott rendszert használunk, akkor a sudo szükséges az elejére. Az openssh-server a telepítéskor létrehozza a szerveren az SSH privár és publikus kulcsokait, de generáljunk újakat.

rm -v /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server

Ezt követően indítsuk el az SSH szerverünket. Mivel ezen a konténeren nincs systemd, ezért a jól bevált init.d szkriptel teszem meg.

/etc/init.d/ssh start
[ ok ] Starting OpenBSD Secure Shell server: sshd.

Ellenőrizzük is a kliensen:

nmap 172.17.0.2 -p 22

PORT STATE SERVICE
22/tcp open ssh

Úgy tűnik működik. Most hozzunk létre a szerveren egy git nevű felhasználót:

useradd git
passwd git
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
mkdir /home/git
chown git.git -R /home/git/

És kész! Próbáljuk is ki működik-e az ssh elérés a git felhasználóval a kliensről:

ssh git@172.17.0.2
git@172.17.0.2's password:
$

Igen! Ha ezzel megvagyunk másoljuk fel a kliens gép publikus SSH kulcsát a ssh szerverre, így jelszó nélkül tudunk belépni és a git szervernek parancsokat kiadni a kliensről. Ez többféle módon megtehető, én most ezt választottam:

scp ~/.ssh/id_rsa.pub git@172.17.0.2:/home/git/uploaded_key.pub
ssh git@172.17.0.2 "mkdir -p ~/.ssh && cat ~/uploaded_key.pub >> ~/.ssh/authorized_keys && rm uploaded_key.pub"

Majd a ha ezzel megvagyunk konfiguráljuk be az SSH szervert, hogy csak publikus kulccsal rendelkező felhasználókat engedjen be. Szerkesszük a /etc/ssh/ssh_config fájlt a szerveren.

PasswordAuthentication no
ChallengeResponseAuthentication no

Ezt követően indítsuk újra az ssh szervert.

/etc/init.d/ssh restart
[ ok ] Restarting OpenBSD Secure Shell server: sshd.

Ezek után már kulccsal fog beengedni. Térjünk vissza eredeti témánkhoz, a Git szerverhez. Ahhoz, hogy a Git szerver repóban parancsokat tudjunk végrehajtani léteznie kell  a szerveren az adott könyvtárnak és ott egy inicializált Git adatbázisnak. hozzunk létre a szerveren egy proba repót.

mkdir -p ~/git-repos/proba
git init --bare ~/git-repos/proba
ls -la ~/git-repos/proba
total 40
drwxr-xr-x 7 git git 4096 Jan 25 13:01 .
drwxr-xr-x 3 git git 4096 Jan 25 13:00 ..
-rw-r--r-- 1 git git 23 Jan 25 13:01 HEAD
drwxr-xr-x 2 git git 4096 Jan 25 13:01 branches
-rw-r--r-- 1 git git 66 Jan 25 13:01 config
-rw-r--r-- 1 git git 73 Jan 25 13:01 description
drwxr-xr-x 2 git git 4096 Jan 25 13:01 hooks
drwxr-xr-x 2 git git 4096 Jan 25 13:01 info
drwxr-xr-x 4 git git 4096 Jan 25 13:01 objects
drwxr-xr-x 4 git git 4096 Jan 25 13:01 refs

A jogosultságoknak és a tulajdonságoknak mindenképpen a git felhasználóhoz kell, hogy rendelve legyenek. Na, OK! Klónozzuk a távoli repót.

git clone ssh://git@172.17.0.2/home/git/git-repos/proba
Cloning into 'proba'...
warning: You appear to have cloned an empty repository.

Figyelem! Mindig a teljes elérési úttal adjuk meg a repó elérését! Ezt követően nézzük meg a kliensen a repó távoli beállítását.

cd proba
git remote -v
origin	ssh://git@172.17.0.2/home/git/git-repos/proba (fetch)
origin	ssh://git@172.17.0.2/home/git/git-repos/proba (push)

És akkor próbáljuk is ki a kliensről.

[anon117@anon117box proba]$ echo alma >> alma txt
[anon117@anon117box proba]$ git add .
[anon117@anon117box proba]$ git commit -m "commit üzenet"
[master (root-commit) 1b4e9da] commit üzenet
 1 file changed, 1 insertion(+)
 create mode 100644 alma
[anon117@anon117box proba]$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 217 bytes | 108.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://172.17.0.2/home/git/git-repos/proba
 * [new branch]      master -> master

Úgy tűnik működik. A különböző rendszereken lehetnek eltérések, de az alap gondolat ugyanaz.

Hozzászólások lezárva.