# 3.3\. 公钥认证管理
开发者向GitHub版本库写入最常用到的协议是SSH协议,因为SSH协议使用公钥认证,可以实现无口令访问,而若使用HTTPS协议每次身份认证时都需要提供口令(可以通过在文件`~/.netrc`中写入明文口令实现使用 HTTPS 协议时也能自动完成认证。具体格式参见ftp命令的MAN手册中相关介绍)。使用SSH公钥认证,就涉及到公钥的管理。
## 3.3.1\. 用户级公钥管理
开发者可能会从不止一台电脑访问GitHub中的版本库(用SSH协议),因不同的电脑有不同的公钥/私钥对,这就需要为GitHub账号添加多个公钥。点击账号设置中的“SSH Public Keys”进入SSH公钥管理界面,如图3-11所示。
[![../images/ssh-public-keys.png](http://www.worldhello.net/gotgithub/images/ssh-public-keys.png)](https://box.kancloud.cn/2015-07-09_559de2c5492f9.png)
图3-11:SSH多公钥管理
如图3-11,在创建gotgithub账号一开始,就手工添加了名为“My Mac OS X”的公钥,显然这是为苹果电脑准备的。图中正在添加的名为“Key on Windows”是为Windows环境下使用SSH协议访问GitHub准备的公钥。
当添加了新的公钥后,无论是从哪台电脑(苹果或PC)用SSH协议访问版本库时都拥有相同授权,即都是以gotgithub账号身份来访问。例如用户级公钥访问GitHub的SSH服务,在提示信息中会显示用户ID,如下:
```
$ ssh -T git@github.com
Hi gotgithub! You've successfully authenticated, but GitHub does not provide shell access.
```
## 3.3.2\. 项目级公钥管理
多增加一个用户级别的公钥,就意味着可以从另外一台电脑访问该用户所有版本库。但有时只希望从某台电脑上向某一个版本库“写入”,其他版本库则不可写,这可以通过设置版本库级别的公钥认证实现。
以项目管理者(创建者)身份登录GitHub,例如以gotgithub用户身份访问gotgithub/helloworld版本库,进入到项目的管理页面,选择菜单中的“Deploy Keys”,即可设置项目级别公钥。如图3-12所示。
[![../images/deploy-keys.png](http://www.worldhello.net/gotgithub/images/deploy-keys.png)](https://box.kancloud.cn/2015-07-09_559de2c94a9b3.png)
图3-12:项目级公钥管理
就像一个用户可以设置多个用户级公钥一样,也可以为一个项目设置多个项目级公钥。无论是项目级公钥还是用户级公钥都有同样的限制:一个公钥只能使用一次。
当使用项目级公钥访问GitHub的SSH服务,会在提示信息中显示版本库ID而非用户ID。如下的命令输出中显示了版本库IDgotgithub/helloworld。
```
$ ssh -i ~/.ssh/deploy-key -T git@github.com
Hi gotgithub/helloworld! You've successfully authenticated, but GitHub does not provide shell access.
```
- 前言
- 1. 探索GitHub
- 1.1. 什么是GitHub
- 1.2. GitHub亮点
- 1.3. 探索GitHub
- 2. 加入GitHub
- 2.1. 创建GitHub账号
- 2.2. 浏览托管项目
- 2.3. 社交网络
- 3. 项目托管
- 3.1. 创建新项目
- 3.2. 操作版本库
- 3.3. 公钥认证管理
- 3.4. 版本库钩子扩展
- 3.5. 建立主页
- 4. 工作协同
- 4.1. Fork + Pull模式
- 4.2. 共享版本库
- 4.3. 组织和团队
- 4.4. 代码评注
- 4.5. 缺陷跟踪
- 4.6. 维基
- 5. 付费服务
- 5.1. GitHub收费方案
- 5.2. GitHub企业版
- 6. GitHub副产品
- 6.1. GitHub:Gist
- 6.2. 其他版本控制工具支持
- 6.2.1. 用SVN操作GitHub
- 6.2.2. 用Hg操作GitHub
- 6.3. 客户端工具
- 6.4. 其他
- 7. 附录:轻量级标记语言
- 贡献者列表