如何安全和方便地操作 Github

2020-06-03T20:29:00

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 NetcatUser 字段非必须;使用 ssh-agent 时,IdentityFile 非必须。

邮箱保护

虽然 Github 页面不会展示邮箱,但 Git 仓库的提交记录中却包含了提交者信息。对于任一 Public Repo,都可通过 git clonegit 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 提供的邮箱。

部分参考

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »