forked from progit/progit2-de
-
Notifications
You must be signed in to change notification settings - Fork 0
/
setting-up-server.asc
149 lines (121 loc) · 6.66 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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
[[_setting_up_server]]
=== Einrichten des Servers
Lassen Sie uns durch die Einrichtung des SSH-Zugriffs auf der Serverseite gehen.
In diesem Beispiel verwenden Sie die Methode `authorized_keys` zur Authentifizierung Ihrer Benutzer.
Wir nehmen an, dass Sie eine Standard-Linux-Distribution wie Ubuntu verwenden.
[NOTE]
====
Viele der hier beschriebenen Vorgänge können mit dem Befehl `ssh-copy-id` automatisiert werden, ohne dass öffentliche Schlüssel manuell kopiert und installiert werden müssen.
====
Zuerst erstellen Sie ein `git` Benutzerkonto und ein `.ssh` Verzeichnis für diesen Benutzer:
[source,console]
----
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
----
Als nächstes müssen Sie einige öffentliche SSH-Schlüssel für Entwickler zur `authorized_keys` Datei für den `git` User hinzufügen.
Nehmen wir an, Sie haben einige vertrauenswürdige öffentliche Schlüssel und haben sie in temporären Dateien gespeichert.
Auch hier sehen die öffentlichen Schlüssel in etwa so aus:
[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
----
Sie fügen sie einfach an die Datei `authorized_keys` des `git` Benutzers in dessen `.ssh` Verzeichnis an:
[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
----
Nun können Sie ein leeres Repository für sie einrichten, indem Sie `git init` mit der Option `--bare` ausführen, die das Repository ohne Arbeitsverzeichnis initialisiert:(((Git Befehle, 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/
----
Dann können John, Josie oder Jessica die erste Version ihres Projekts in dieses Repository pushen, indem sie es als Remote hinzufügen und dann einen Branch pushen.
Beachten Sie, dass jemand auf der Maschine eine Shell ausführen muss und jedes Mal, wenn Sie ein Projekt hinzufügen möchten, ein Bare-Repository erstellen muss.
Lassen Sie uns `gitserver` als Hostname für den Server verwenden, auf dem Sie Ihren `git` Benutzer und Ihr Repository eingerichtet haben.
Wenn Sie das intern ausführen und DNS so einrichten, dass `gitserver` auf diesen Server zeigt, dann können Sie die Befehle so verwenden, wie sie sind (vorausgesetzt, dass `myproject` ein bestehendes Projekt mit Dateien darin ist):
[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
----
Jetzt können die anderen es klonen und Änderungen genauso einfach wieder pushen:
[source,console]
----
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master
----
Mit dieser Methode können Sie schnell einen Read/Write Git-Server für eine Handvoll Entwickler in Betrieb nehmen.
Sie sollten beachten, dass sich derzeit alle diese Benutzer auch am Server anmelden und eine Shell als `git` Benutzer erhalten können.
Wenn Sie das einschränken wollen, müssen Sie die Shell zu etwas anderem in der Datei `/etc/passwd` ändern.
Sie können das `git` Benutzerkonto mit einem in Git enthaltenen Shell-Tool mit dem Namen `git-shell` ganz einfach auf Git-bezogene Aktivitäten beschränken.
Wenn Sie diese Option als Anmeldeshell des `git` Benutzerkontos festlegen, kann dieses Konto keinen normalen Shell-Zugriff auf Ihren Server haben.
Um das zu nutzen, geben Sie `git-shell` anstelle von `bash` oder `csh` für die Login-Shell dieses Kontos an.
Um das zu erreichen, müssen Sie zuerst den vollständigen Pfadnamen des `git-shell` Befehls zu `/etc/shells` hinzufügen, falls er nicht bereits vorhanden ist:
[source,console]
----
$ 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
----
Jetzt können Sie die Shell für einen Benutzer mit `chsh <username> -s <shell>` bearbeiten:
[source,console]
----
$ sudo chsh git -s $(which git-shell)
----
Nun kann der `git` Benutzer die SSH-Verbindung weiterhin zum Pushen und Pullen von Git-Repositorys verwenden, aber nicht mehr auf der Maschine navigieren.
Wenn Sie es versuchen, sehen Sie eine entsprechende Zurückweisung des Logins:
[source,console]
----
$ 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.
----
An dieser Stelle können Benutzer noch die SSH-Portforwarding verwenden, um auf jeden Host zuzugreifen, den der Git-Server erreichen kann.
Wenn Sie dies verhindern möchten, können Sie die Datei `authorized_keys` bearbeiten und jedem Schlüssel, den Sie einschränken möchten, die folgenden Optionen voranstellen:
[source,console]
----
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
----
Das Ergebnis sollte so aussehen:
[source,console]
----
$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...
----
Jetzt funktionieren die Git-Netzwerkbefehle weiterhin einwandfrei, aber die Benutzer können keine Shell abrufen.
Wie in der Ausgabe angegeben, können Sie auch ein Verzeichnis im Ausgangsverzeichnis des `git` Benutzers einrichten, das den `git-shell` Befehl ein wenig anpasst.
Sie können beispielsweise die vom Server akzeptierten Git-Befehle einschränken oder die Nachricht anpassen, die Benutzer sehen, wenn sie versuchen, SSH auf diese Weise auszuführen.
Führen Sie `git help shell` aus, um weitere Informationen zum Anpassen der Shell zu erhalten.(((Git Befehle, help)))