MENU

如何安全和方便地操作 Github

2020 年 06 月 03 日 • 阅读: 23211 • 安全

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 提供的邮箱。

部分参考

TG 大佬群 QQ 大佬群

返回文章列表 文章二维码
本页链接的二维码
打赏二维码
添加新评论

Loading captcha...

已有 5 条评论
  1. Zombie110year Zombie110year   Windows 10 x64 Edition  Google Chrome 86.0.4240.80

    最新消息,`*.github.io` 域名已经被 DNS 污染,全部指向 127.0.0.1 了。@(乖)

    1. Tony Tony   Mac OS X 10.15.6  Safari 14.0.2

      @Zombie110year没有吧,江苏电信可以访问

  2. Spoience Spoience   Windows 10 x64 Edition  Google Chrome 83.0.4103.106

    原来防火墙主要阻断的是Github的22端口#(长草),我在Windows下使用的是Clash客户端代理,然后给Git设置代理,感觉还不错#(脸红)就是对Git刚接触不是很熟悉,不过感觉Git的版本控制很有意思::quyin:1huaji::

  3. 于长野 于长野   Android 10  Google Chrome 81.0.4044.96

    大佬真是笔耕不辍啊,我最近都不知道写点什么好了::quyin:hematemesis::

  4. mzrme mzrme   GNU/Linux x64  Google Chrome 81.0.4044.92

    最近Github还在被中间人攻击