-
Notifications
You must be signed in to change notification settings - Fork 36
/
setting-up-server.asc
171 lines (150 loc) · 9.6 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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
[[r_setting_up_server]]
//////////////////////////
=== Setting Up the Server
//////////////////////////
=== サーバーのセットアップ
//////////////////////////
Let's walk through setting up SSH access on the server side.
In this example, you'll use the `authorized_keys` method for authenticating your users.
We also assume you're running a standard Linux distribution like Ubuntu.
First, you create a `git` user and a `.ssh` directory for that user.
//////////////////////////
それでは、サーバー側での SSH アクセスの設定について順を追って見ていきましょう。
この例では `authorized_keys` 方式でユーザーの認証を行います。
また、Ubuntu のような標準的な Linux ディストリビューションを動かしているものと仮定します。
まずは `git` ユーザーを作成し、そのユーザーの `.ssh` ディレクトリを作りましょう。
[source,console]
----
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
----
//////////////////////////
Next, you need to add some developer SSH public keys to the `authorized_keys` file for the `git` user.
Let's assume you have some trusted public keys and have saved them to temporary files.
Again, the public keys look something like this:
//////////////////////////
次に、開発者たちの SSH 公開鍵を `git` ユーザーの `authorized_keys` に追加していきましょう。
信頼できる公開鍵が一時ファイルとしていくつか保存されているものとします。
先ほどもごらんいただいたとおり、公開鍵の中身はこのような感じになっています。
[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
----
//////////////////////////
You just append them to the `git` user's `authorized_keys` file in its `.ssh` directory:
//////////////////////////
これを、`git` ユーザーの `.ssh` ディレクトリにある `authorized_keys` に追加していきましょう。
[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
----
//////////////////////////
Now, you can set up an empty repository for them by running `git init` with the `--bare` option, which initializes the repository without a working directory:(((git commands, init, bare)))
//////////////////////////
さて、彼らが使うための空のリポジトリを作成しましょう。`git init` に `--bare` オプションを指定して実行すると、作業ディレクトリのない空のリポジトリを初期化します。(((git commands, init, bare)))
[source,console]
----
$ cd /opt/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /opt/git/project.git/
----
//////////////////////////
Then, John, Josie, or Jessica can push the first version of their project into that repository by adding it as a remote and pushing up a branch.
Note that someone must shell onto the machine and create a bare repository every time you want to add a project.
Let's use `gitserver` as the hostname of the server on which you've set up your `git` user and repository.
If you're running it internally, and you set up DNS for `gitserver` to point to that server, then you can use the commands pretty much as is (assuming that `myproject` is an existing project with files in it):
//////////////////////////
これで、John と Josie そして Jessica はプロジェクトの最初のバージョンをプッシュできるようになりました。このリポジトリをリモートとして追加し、ブランチをプッシュすればいいのです。
何か新しいプロジェクトを追加しようと思ったら、そのたびに誰かがサーバーにログインし、ベアリポジトリを作らなければならないことに注意しましょう。
`git` ユーザーとリポジトリを作ったサーバーのホスト名を `gitserver` としておきましょう。
`gitserver` がそのサーバーを指すように DNS を設定しておけば、このようなコマンドを使えます(ここでは、`myproject` というディレクトリがあってファイルも保存されているものとします)。
[source,console]
----
# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'initial commit'
$ git remote add origin git@gitserver:/opt/git/project.git
$ git push origin master
----
//////////////////////////
At this point, the others can clone it down and push changes back up just as easily:
//////////////////////////
これで、他のメンバーがリポジトリをクローンして変更内容を書き戻せるようになりました。
[source,console]
----
$ git clone git@gitserver:/opt/git/project.git
$ cd project
$ vim README
$ git commit -am 'fix for the README file'
$ git push origin master
----
//////////////////////////
With this method, you can quickly get a read/write Git server up and running for a handful of developers.
//////////////////////////
この方法を使えば、小規模なチーム用の読み書き可能な Git サーバーをすばやく立ち上げることができます。
//////////////////////////
You should note that currently all these users can also log into the server and get a shell as the `git` user.
If you want to restrict that, you will have to change the shell to something else in the `passwd` file.
//////////////////////////
この時点では、公開鍵を追加してもらったユーザー全員が `git` ユーザーとしてサーバーにログインしてシェルが使える状態であることに注意しましょう。そこを制限したいのなら、シェルを変更するために `passwd` ファイルを編集する必要があります。
//////////////////////////
You can easily restrict the `git` user to only doing Git activities with a limited shell tool called `git-shell` that comes with Git.
If you set this as your `git` user's login shell, then the `git` user can't have normal shell access to your server.
To use this, specify `git-shell` instead of bash or csh for your user's login shell.
To do so, you must first add `git-shell` to `/etc/shells` if it's not already there:
//////////////////////////
`git` ユーザー権限の制限は簡単です。Git に付属している `git-shell` というツールを使えば、Git 関連の行動しかとれないようになります。
そして、これを `git` ユーザーのログインシェルにしてしまえば、サーバー上で `git` ユーザーは通常の行動がとれなくなります。
ユーザーのログインシェルを bash や csh から `git-shell` に変更すれば、制限がかかります。
それには、前もって `git-shell` を `/etc/shells` に追加しておく必要があります。
[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 vim /etc/shells # and add the path to git-shell from last command
----
//////////////////////////
Now you can edit the shell for a user using `chsh <username>`:
//////////////////////////
ユーザーのシェルを変更するには `chsh <username>` を実行します。
[source,console]
----
$ sudo chsh git # and enter the path to git-shell, usually: /usr/bin/git-shell
----
//////////////////////////
Now, the `git` user can only use the SSH connection to push and pull Git repositories and can't shell onto the machine.
If you try, you'll see a login rejection like this:
//////////////////////////
これで、`git` ユーザーは Git リポジトリへのプッシュやプル以外のシェル操作ができなくなりました。それ以外の操作をしようとすると、このように拒否されます。
[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.
----
//////////////////////////
Now Git network commands will still work just fine but the users won't be able to get a shell.
As the output states, you can also set up a directory in the `git` user's home directory that customizes the `git-shell` command a bit.
For instance, you can restrict the Git commands that the server will accept or you can customize the message that users see if they try to SSH in like that.
Run `git help shell` for more information on customizing the shell.(((git commands, help)))
//////////////////////////
この状態でも Git のネットワーク関連のコマンドは機能しますが、通常のシェルアクセスはできなくなっています。
また、コマンド出力にもあるように、`git` ユーザーのホームディレクトリ配下にディレクトリを作って、`git-shell`をカスタマイズすることもできます。
具体的には、サーバー上で実行可能な Git コマンドの制限や、ユーザーが SSH でどこかに接続しようとしたときに表示するメッセージを変更できます。
`git help shell` を実行すると、シェルのカスタマイズについての詳細が確認できます。(((git commands, help)))