用 SSH 或 Token 向 GitHub 进行身份验证
查看【Git】专题可浏览更多内容
添加 Github 远程仓库
如果不是克隆的远程仓库,而是本地仓库想要连接到 Github 的仓库,可以使用命令:
# git remote add <名称> git@github.com:<Github 用户名>/<项目名>.git
git remote add origin git@github.com:Example/Markdown.git
解决权限问题:
但是当推送时却提示权限问题:
git push -u origin master
git@github.com: Permission denied (publickey).
致命错误:无法读取远程仓库。
请确认您有正确的访问权限并且仓库存在。
解决方法有两种:
- Fine-grained PATs;
- 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
,如果你是设置为类似 git@github.com:<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@example.com"
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 密钥的填空处即可