31.2.2 增加新用户

增加新用户,就是允许新用户能够通过其公钥访问Git服务。只要将新用户的公钥添加到gitosis-admin版本库的keydir目录下,即完成新用户的添加,具体操作过程如下。

(1)管理员从用户获取公钥,并将公钥按照username.pub格式进行重命名。

用户可以通过邮件或其他方式将公钥传递给管理员,切记不要将私钥误传给管理员。如果发生私钥泄露,马上重新生成新的公钥/私钥对,并将新的公钥传递给管理员,并申请将旧的公钥作废。

关于公钥名称,我引入了类似Gitolite的实现:

用户从不同的客户端主机访问有着不同的公钥,如果希望使用同一个用户名进行授权,可以按照username@host.pub的方式命名公钥文件,和名为username@pub的公钥指向同一个用户username。

也支持邮件地址格式的公钥,即形如username@gmail.com.pub的公钥。Gitosis能够很智能地区分是以邮件地址命名的公钥还是相同用户在不同主机上的公钥。如果是邮件地址命名的公钥,将以整个邮件地址作为用户名。

(2)管理员进入gitosis-admin本地克隆版本库中,复制新用户公钥到keydir目录。


$cp/path/to/dev1.pub keydir/

$cp/path/to/dev2.pub keydir/


(3)执行git add命令,将公钥添加到版本库。


$git add keydir

$git status

On branch master

Changes to be committed:

(use "git reset HEAD<file>…"to unstage)

#

new file:keydir/dev1.pub

new file:keydir/dev2.pub

#


(4)执行git commit,完成提交。


$git commit-m "add user:dev1,dev2"

[master d7952a5]add user:dev1,dev2

2 files changed,2 insertions(+),0 deletions(-)

create mode 100644 keydir/dev1.pub

create mode 100644 keydir/dev2.pub


(5)执行git push,同步到服务器,才真正完成新用户的添加。


$git push

Counting objects:7,done.

Delta compression using up to 2 threads.

Compressing objects:100%(5/5),done.

Writing objects:100%(5/5),1.03 KiB,done.

Total 5(delta 0),reused 0(delta 0)

To git@server:gitosis-admin.git

2482e1b..d7952a5 master->master


如果这时查看服务器端~git/.ssh/authorized_keys文件,会发现新增的用户公钥也附加在其中:


autogenerated by gitosis,DO NOT EDIT

command="gitosis-serve

jiangxin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty

<用户jiangxin的公钥…>

command="gitosis-serve

dev1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa

<用户dev1的公钥…>

command="gitosis-serve

dev2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa

<用户dev1的公钥…>