如果想出发,就不要等到明天!
全部博文(317)
分类: 服务器与存储
2013-02-21 23:05:08
服务器:ubuntu 12.04 (192.168.15.6)
客户端:ubuntu 10.04 (192.168.15.5)
Gitolite 搭建 Git 服务器,实现 Gitolite 服务器管理账户与普通用户无密码访问,且 Gitolite 管理员与普通用户在server上没有登录权限。
1.服务器端:
1.1 创建 Git 服务器专用帐户 gitolite , 并在 /home/gitolite/ 下创建安装目录 bin :
1.2 获取 Gitolite 并安装:
2. 客户端:
2.1 创建 Gitolite 服务器管理员用户,并创建管理员用户密钥:
2.2 复制(用U盘或者ftp都行,自己想办法)管理员公钥(gitAdmin.pub) 到服务器(192.168.15.6)上的 gitolite 用户目录下:
因为 Gitolite 管理员(gitAdmin)只负责管理 Gitolite,我们的目标是把 Gitolite 管理员以及普通用户的限制在仅能与 Gitolite 交互,
但不能登录服务器帐户(gitolite)shell 对服务器直接操作,所以采用密钥验证的方式,
这样可以避免把服务器登录账户(gitolite)的密码告诉所有使用服务器的用户,即使是 Gitolite 服务器管理员(gitAdmin)。
注:要搞清楚为什么用密钥验证以及如何使用密钥,则要搞清楚 Gitolite 管理员(gitAdmin) ,与服务器上 Gitolite 服务器专用账户(gitolite)的区别:
1)Gitolite 管理员 gitAdmin,只是管理 Gitolite 服务器,对其进行配置、用户管理、Git仓库管理,是不应该知道服务器用户(gitolite)密码的,
其自身在服务器(192.168.15.6)上面是没有登录账户的,gitAdmin 账户仅用于与 Gitolite 交互。
2) Gitolite 服务器专用账户 gitolite ,是服务器上建立的专门用于安装并直接操作 Gitolite 服务器的一个超级用户,只要知道其登录 shell 密码就可以对其进行
shell登录,并且执行所有需要 gitolite 密码才可以执行的操作,甚至把所有数据包括服务器直接删除。
3. 服务器端:
3.1 用客户端复制过来的 Gitolite 管理员用户公钥(gitAdmin.pub) 配置 Gitolite 服务器:
3.2 对比客户端上管理员 公钥(gitAdmin.pub) 与 服务器上 ssh 登录认证文件:
由此看出当我们执行 gitolite setup -pk gitAdmin.pub 对 Gitolite 进行配置后,
服务器管理员的公钥(gitAdmin.pub)被追加到服务器账户(gitolite)的ssh登录认证文件(~/.ssh/authorized_keys)里面。
这是否就意味着客户端可以通过 Gitolite 管理员私钥 (~/.ssh/gitAdmin) 进行认证登录服务器用户(gitolite)的 shell 呢?
o(∩_∩)o 哈哈,这就是用密钥认证比直接用密码登录厉害的地方啦!立马看下面的实验!
3.3 在客户端(192.168.15.5)登录管理员(gitAdmin)的shell,并尝试使用 gitAdmin 的私钥(~/.ssh/gitAdmin)进行认证登录服务器(192.168.15.6)
专用账户(gitolite)的 shell :
o(∩_∩)o 哈哈,看到了吧!即使输入了私钥(gitAdmin)的正确密码,也无法登录到服务器账户(gitolite)的shell,更不用说搞破坏啦。。。
4.客户端:
4.1 配置管理员访问服务器的别名:
host: 随便定义,用于客户端标识所连接服务端的名字;
user :ssh登录服务器的账户;
hostname :服务器主机名,或者直接填写服务器 IP 地址;
port:服务器的ssh访问端口,默认22;
identityfile :管理员登录服务器所使用的验证密钥;
4.2 使用服务器别名从 Gitolite 服务器 clone Gitolite 服务器管理仓库 gitolite-admin ,验证别名配置是否成功:
5. 客户端:
5.1 给普通用户创建访问 Gitolite 服务器的密钥:
5.2 复制(U盘、ftp 自己想办法就是)用户公钥(git.pub)给 Gitolite 管理员(gitAdmin):
这里我直接就复制到管理员(gitAdmin)刚才 clone 过来的管理仓库 gitolite-admin 的keydir文件夹里面。
5.3 使用公钥(git.pub)为用户 git 创建一个他能访问的 Git 仓库:
对 gitolite-admin 的操作这里就不详细讲解他的语法级细节,
自己去google或者看官方文档()好了。
5.4 登录拥有私钥(~/.ssh/git)的用户 david ,尝试使用私钥 clone “GarfieldRepo” :
5.4.1 配置服务器访问别名:
5.4.2 使用别名 clone “GarfieldRepo”:
5.5 验证 “GarfieldRepo” 能够正常提交到 Gitolite 服务器:
验证成功!o(∩_∩)o 哈哈!
5.6 最后验证使用私钥(~/.ssh/git)能否登录服务器用户(gitolite)的shell:
o(∩_∩)o 哈哈,同样是不能登录到 gitolite 用户的shell!
总结:服务器端使用 gitolite 专用账户对服务器经行最高级别的安装维护,通过从客户端导入公钥到服务器,
客户端无论是管理员(gitAdmin),还是普通用户david,分别都可以通过他们的私钥与 Gitolite 服务器进行交互,
同时实现了他们仅能跟 Gitolite 服务器的交互,不能登录到服务器shell直接操作的限制。