如何安全和方便地操作 Github
SSH 协议
SSH 和 HTTPS 在数据 传输安全性
上并无优略,在 使用便利性
上也同样如此,因为即便 Over HTTPS,也可借助某些工具 记住密码
。牵强来说,SSH Key 和 Password 同时泄露,前者本身需再验证 Passphase
,且后者对 Github 账户的 权限
更大。关于这一点,可在 Github 设置中开启 两步验证 弥补。
Command Line 下操作自己的仓库,SSH 协议是相对成熟的方案。生成 SSH Key 时一定要填写 passphase
,以防 自身误操作
或 他人非法登录和使用
你的电脑。
此外,为避免每次提交都输入 passphase,可将私钥添加到 ssh-agent
,该程序会在用户注销终端前记住 passphase,简化提交流程。为减小离开屏幕时,会话被他人使用的概率,还可通过 ssh-add -t time /path_to_ssh_private_key
指定 过期时间
,具体过程见 使用 SSH 连接到 GitHub。需要说明的是,打开多个终端,每个会话都需单独确认 passphase,这就避免了潜在的非法 远程
操作。
代理配置
由于众所周知的原因,在国内使用 Github 速度十分缓慢,设置代理成为必须操作,具体见以下命令,其中 proxy-server:port
为代理服务器地址。
# 代理 HTTPS 协议
➜ LOGI git config --global http.https://github.com.proxy proxy-server:port
# 代理 SSH 协议
➜ LOGI cat >> ~/.ssh/config <<EOF
Host github.com
Hostname ssh.github.com
Port 443
User git
IdentityFile /path_to_ssh_private_key
Proxycommand nc -X 5 -x proxy-server:port %h %p
EOF
上述命令在配置 SSH 协议时使用了 443 端口,可避免 22 端口被部分防火墙阻断。代理方面,使用了 netcat
连接 HTTP 或 SOCKS,用法见 The GNU Netcat。User
字段非必须;使用 ssh-agent
时,IdentityFile
非必须。
邮箱保护
虽然 Github 页面不会展示邮箱,但 Git 仓库的提交记录中却包含了提交者信息。对于任一 Public Repo,都可通过 git clone
和 git log
获取所有者的邮箱地址。此外,Github API 也未对此信息隐藏,通过访问 https://api.github.com/users/username/events/public
便可获得提交者信息。这些都是由 Git 协议本身的特性决定的。
如果你想隐藏邮箱信息,可在 邮箱设置 里勾选 Keep my email addresses private
,这样 Github 会为你生成专用邮箱,你可使用它进行后续操作。不幸的是,除非撤销以前所有仓库的提交记录,否则他人仍能在 Git 历史中发现原始信息。
需要说明的是,更换邮箱后,必须在本地修改 Git Repo 作者才能完成提交,以下命令完成了前述操作,其中 new_specific_email
为生成的新邮箱。
➜ LOGI git config --global user.email new_specific_email
➜ LOGI git commit --amend --reset-author
➜ LOGI git push
签名校验
假如某人对某仓库拥有所有权,他便能以 任意用户名
和 邮箱
向仓库 Commit 记录。之后从网页查看提交者时,Github 会根据提交邮箱匹配已注册的 Github 账户,点击头像直接跳转。当这种情况发生时,该提交就是不可信的,除了提交者自己,没有人能确定其真实身份。
签名机制
保证了记录只能由本人提交。Github 使用 GPG 签名,账户所有者需先将关联了提交邮箱的 GPG 公钥上传 Github,每次提交时,GPG 程序会使用私钥签名后再发送给 Github,服务器收到请求后,校验程序如发现提交邮箱与公钥不匹配,则拒绝操作,由此避免了伪造提交。具体使用过程见 将您的签名密钥告知 Git。
需要说明的是,和生成 SSH 密钥一样,你也应为 GPG Key 设置 passphase
。同时,为避免重复输入,与 ssh-agent
对应,可使用 gpg-agent 管理私钥。此外,如果你开启了邮箱保护,生成密钥时,你应使用 Github 提供的邮箱。