-
Notifications
You must be signed in to change notification settings - Fork 33
/
Copy pathsetting-up-server.asc
125 lines (102 loc) · 5.46 KB
/
setting-up-server.asc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
[[_setting_up_server]]
=== 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.
[NOTE]
====
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.
[source,console]
----
$ 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:
[source,console]
----
$ 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:
[source,console]
----
$ 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:(((git commands, init, bare)))
[source,console]
----
$ 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):
[source,console]
----
# 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:
[source,console]
----
$ 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:
[source,console]
----
$ cat /etc/shells # see if `git-shell` is already in there. If ...
$ 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:
[source,console]
----
$ 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:
[source,console]
----
$ ssh git@gitserver
fatal: Interactive git shell is 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.(((git commands, help)))