Git
Chapters ▾ 2nd Edition

4.4 Git on the Server - Sunucu Kurma

Sunucu Kurma

Sunucu tarafında SSH erişimini kurma işlemine geçelim. Bu örnekte, kullanıcılarınızı kimlik doğrulamak için authorized_keys (yetkili anahtar) yöntemini kullanacaksınız. Ayrıca, Ubuntu gibi standart bir Linux dağıtımını kullandığınızı varsayıyoruz.

Burada açıklanan birçok işlem, ortak anahtarları manuel olarak kopyalamak ve yüklemek yerine ssh-copy-id komutunu kullanarak otomatikleştirilebilir.

İlk olarak, bir git kullanıcı hesabı oluşturmalısınız ve bu kullanıcı için bir .ssh dizini oluşturmalısınız.

$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

Sonraki adım, güvenilir bazı geliştirici SSH ortak anahtarlarını git kullanıcısı için authorized_keys dosyasına eklemektir. Varsayalım ki güvenilir ortak anahtarlarınız var ve bunları geçici dosyalara kaydettiniz. Tekrar belirtmek gerekirse, ortak anahtarlar şu şekilde görünü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

Onları sadece git kullanıcısının .ssh dizinindeki authorized_keys dosyasına eklersiniz:

$ 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

Şimdi, onlar için boş bir repo kurabilirsiniz. Bunun için --bare seçeneği ile git init komutunu çalıştırın, böylece bir çalışma dizini olmadan repo başlatılır:

$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/

Sonra, John, Josie veya Jessica, ona bir uzak repo olarak bağlanıp, bir dalı yukarı iterek, projelerinin ilk sürümünü bu repoya ekleyebilir. Unutmayın ki bir proje eklemek istediğinizde birisi makinaya giriş yapmalı ve bir yalın repo oluşturmalıdır. git kullanıcınızı ve repoyu kurduğunuz sunucunun ana bilgisayar adını gitserver olarak kullanalım. Eğer bunu içsel (internal) olarak çalıştırıyorsanız ve gitserver için DNS kurulumu yaptıysanız, o zaman komutları neredeyse olduğu gibi kullanabilirsiniz (`myproject`i dosyalar içeren mevcut bir proje olarak varsayalım):

# 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

Artık, diğerleri bunu kolayca kopyalayabilir ve değişiklikleri itebilir:

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

Bu yöntemle, birkaç geliştirici için hızlıca okuma/yazma erişimli bir Git sunucusu kurabilirsiniz.

Dikkat etmeniz gereken bir husus, şu anda tüm bu kullanıcıların sunucuya giriş yapıp, bir git kullanıcısı olarak bir kabuk (shell) alabilmesidir. Bunu sınırlamak istiyorsanız, /etc/passwd dosyasında kabuğu başka bir şeye değiştirmeniz gerekecektir.

git kullanıcı hesabını sadece Git ile ilgili faaliyetlerle kısıtlamak için, Git ile birlikte gelen sınırlı bir kabuk aracı olan git-shell`i kullanabilirsiniz. Eğer `git kullanıcı hesabının giriş kabuğu olarak bunu ayarlarsanız, o hesap sunucunuzda normal kabuk erişimine sahip olamaz. Bunu kullanmak için, o hesabın giriş kabuğu olarak bash veya csh yerine git-shell 'i belirtmelisiniz. Bunun için, eğer hali hazırda yoksa, /etc/shells dosyasına git-shell komutunun tam yolunu eklemeniz gerekmektedir:

$ cat /etc/shells   # see if `git-shell` is already in there.  If not...
$ which git-shell   # make sure git-shell is installed on your system.
$ sudo -e /etc/shells  # and add the path to git-shell from last command

Şimdi bir kullanıcının kabuğunu chsh <kullanıcıadı> -s <kabuk> komutunu kullanarak düzenleyebilirsiniz:

$ sudo chsh git -s $(which git-shell)

Şimdi, git kullanıcısı SSH bağlantısını kullanarak yalnızca Git depolarını itme ve çekme işlemlerini gerçekleştirebilir ama makineye kabuk alamaz. Yine de denerseniz, şunun gibi bir giriş reddi görürsünüz:

$ 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.

Şimdi Git ağ komutları hala düzgün çalışacak ancak kullanıcılar bir kabuk alamayacaktır. Çıktıda belirtildiği gibi, git kullanıcısının ana dizininde git-shell komutunu bir miktar özelleştiren bir dizin de kurabilirsiniz. Örneğin, sunucunun kabul edeceği Git komutlarını sınırlayabilir veya kullanıcıların SSH ile giriş yapmaya çalıştıklarında görecekleri iletileri özelleştirebilirsiniz. Kabuğu özelleştirmekle ilgili daha fazla bilgi için git help shell komutunu çalıştırın.

scroll-to-top