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.