用 SSH 或 Token 向 GitHub 进行身份验证

内容纲要

查看【Git】专题可浏览更多内容

添加 Github 远程仓库

如果不是克隆的远程仓库,而是本地仓库想要连接到 Github 的仓库,可以使用命令:

# git remote add <名称> [email protected]:<Github 用户名>/<项目名>.git
git remote add origin [email protected]:Example/Markdown.git

解决权限问题:

但是当推送时却提示权限问题:

git push -u origin master
[email protected]: Permission denied (publickey).
致命错误:无法读取远程仓库。

请确认您有正确的访问权限并且仓库存在。

解决方法有两种:

  1. Fine-grained PATs;
  2. SSH keys

Personal access token

PAT (Personal access token) 可以在 https://github.com/settings/tokens 进行设置,PAT 目前分为「经典的 PAT」和「细粒度 PAT」

Github 建议只要有可能则使用 Fine-grained PATs,它使开发人员能够对他们授予 PAT 的权限和存储库访问进行精细控制。组织管理员也在控制之中,具有批准策略和访问组织资源的令牌的完全可见性。

根据页面提示创建好 Token 后保存好,该 Token 只会显示一次,使用 PAT 是通过 HTTPS 的所以需要重新设置 origin,如果你是设置为类似 [email protected]:<Github 用户名>/<项目名>.git 这样的远程仓库:

# 重新设置为 HTTPS 的 URL
# git remote set-url <名称> https://github.com/<Github 用户名>/<项目名>.git
git remote set-url origin https://github.com/Example/Markdown.git

接着再次使用 git push 时,就会看到提示询问并填写 Github 的用户名和刚才创建的 Token 即可;

SSH keys

另一种方法是配置 SSH 密钥然后添加到 Github,使用命令:

# 进入到 ~/.ssh
cd ~/.ssh

# sh-keygen -t ed25519 -C <Github 用户的电子邮件地址>
sh-keygen -t ed25519 -C "[email protected]"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/toor/.ssh/id_ed25519):

如果是不支持 ed25519 的旧版本系统可以使用 ssh-keygen -t rsa -b 4096 -C <Github 用户的电子邮件地址>

你可以使用默认的 id_ed25519 或为其他名称 (如果改了后面相应的命令也要改),然后会提示

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

使用 SSH 密钥,如果有人获得了对您计算机的访问权限,攻击者就可以访问使用该密钥的每个系统。要添加额外的安全层,可以向 SSH 密钥添加密码。为避免每次连接时都输入密码,您可以将密码安全地保存在 SSH 代理中。

可以直接按回车键跳过,若日后想要设置密码,可以使用命令而不用重新创建:

ssh-keygen -p -f ~/.ssh/id_ed25519

然后将 SSH 密钥添加到 ssh-agent:

# 在后台启动 ssh-agent
eval "$(ssh-agent -s)"

# 添加
# macOS 用户可以使用 --apple-use-keychain 选项添加时同时存储到钥匙串中
ssh-add ~/.ssh/id_ed25519

这样在 ~/.ssh/ 目录下就会出现同名带 .pub 文件,如 id_ed25519.pub

macOS 用户还需要多做一步:

open ~/.ssh/config

如果提示 The file /Users/YOU/.ssh/config does not exist. 则运行命令

touch ~/.ssh/config
open ~/.ssh/config

这时候应该就会调用系统自带的「文本编辑」程序,然后添加以下内容:

Host *.github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile ~/.ssh/id_ed25519

然后使用浏览器访问 https://github.com/settings/keys 选择「New SSH Key」

使用命令复制 id_ed25519.pub 的内容:

pbcopy < ~/.ssh/id_ed25519.pub

然后粘贴到新建 SSH 密钥的填空处即可