30.2.2 增加新用户
增加新用户,就是允许新用户能够通过其公钥访问Git服务。只要将新用户的公钥添加到gitolite-admin版本库的keydir目录下,即完成新用户的添加,具体操作过程如下。
(1)管理员从用户获取公钥,并将公钥按照username.pub格式进行重命名。
用户可以通过邮件或其他方式将公钥传递给管理员,切记不要将私钥误传给管理员。如果发生私钥泄漏,马上重新生成新的公钥/私钥对,并将新的公钥传递给管理员,并申请将旧的公钥作废。
用户从不同的客户端主机访问有着不同的公钥,如果希望使用同一个用户名进行授权,可以按照username@host.pub的方式命名公钥文件,和名为username.pub的公钥指向同一个用户username。
Gitolite也支持邮件地址格式的公钥,即形如username@gmail.com.pub的公钥。Gitolite能够很智能地区分是以邮件地址命名的公钥还是相同用户在不同主机上的公钥。如果是邮件地址命名的公钥,将以整个邮件地址作为用户名。
(2)管理员进入gitolite-admin本地克隆版本库中,复制新用户公钥到keydir目录。
$cp/path/to/dev1.pub keydir/ $cp/path/to/dev2.pub keydir/ $cp/path/to/jiangxin.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 #new file:keydir/jiangxin.pub #
(4)执行git commit,完成提交。
$git commit-m "add user:jiangxin,dev1,dev2" [master bd81884]add user:jiangxin,dev1,dev2 3 files changed,3 insertions(+),0 deletions(-) create mode 100644 keydir/dev1.pub create mode 100644 keydir/dev2.pub create mode 100644 keydir/jiangxin.pub
(5)执行git push,同步到服务器,才真正完成新用户的添加。
$git push Counting objects:8,done. Delta compression using up to 2 threads. Compressing objects:100%(6/6),done. Writing objects:100%(6/6),1.38 KiB,done. Total 6(delta 0),reused 0(delta 0) remote:Already on'master' remote: remote:*WARNING* remote:the following users(pubkey files in parens)do not appear in the config file: remote:dev1(dev1.pub),dev2(dev2.pub),jiangxin(jiangxin.pub)
如果这时查看服务器端git用户主目录下的.ssh/authorized_keys文件,会发现新增的用户公钥也附加在其中:
$cat~git/.ssh/authorized_keys #gitolite start command="/home/git/.gitolite/src/gl-auth-command admin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty<用户 admin的公钥…> command="/home/git/.gitolite/src/gl-auth-command dev1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty<用户 dev1的公钥…> command="/home/git/.gitolite/src/gl-auth-command dev2",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty<用户 dev2的公钥…> command="/home/git/.gitolite/src/gl-auth-command jiangxin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty<用户 jiangxin的公钥…> #gitolite end
在之前执行git push后的输出中,以remote标识的输出是服务器端执行post-update钩子脚本的输出。其中的警告是说新添加的三个用户在授权文件中没有被引用。接下来便看看如何修改授权文件,以及如何为用户添加授权。
