0%

将Git远程链接由HTTPS切换到SSH

起因是一个多月没写代码,才发现git pull用不了了,错误如下:

$ git pull
Username for 'https://github.com': XUranus
Password for 'https://XUranus@github.com':
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: unable to access 'https://github.com/xuranus/blog/': The requested URL returned error: 403

原来是2021年8月13日后Github为了防黑客禁止了密码验证方式,公告详见:2020-12-15-token-authentication-requirements-for-git-operations,意思是如果使用HTTPS进行Git操作需要使用token替换原来的密码。

使用HTTPS + token

token是一个有使用期限的hash,需要登录Github后在Setting => Developer Setting中定期生成,token用于执行Git操作时验证账户,也可以用来访问Github API。token的生成方式见:creating-a-personal-access-token

但是token使用繁琐,感觉用一串随机hash用来替代密码还不如用SSH,另外一种解决方法就是抛弃HTTPS链接,使用SSH。

使用SSH

  1. 确定你的Git已设置用户名和邮箱

    git config --global user.name "YourName"
    git config --global user.email "email@mail.com"
  2. 查看你的~/home目录下是否已经生成过ssh-key

    ll ~/.ssh

    如果目录不存在或者没有看到id_rsaid_rsa.pub这两个文件就新建一个ssh-key

    ssh-keygen -t rsa -C "email@mail.com"
    # 确保email地址相同
  3. 向你的远程Git仓库加入你的公钥

    cat ~/.ssh/id_rsa.pub
  4. 测试ssh-key

    $ ssh -T git@github.com
    # Hi XUranus! You've successfully authenticated, but GitHub does not provide shell access.
  5. 对于本地remote已经是HTTPS的repo,转换本地连接远程Git的地址

修改.git/config文件:

url = http://github.com/YourName/project.git

改为
url = git@github.com/YourName/project.git

或者用命令行操作:
git remote -v # 查看remote
git remote set-url origin git@github:YourName/project.git # 重新设置remote url

修改完后,再次git pull,大功告成!

Disqus评论区没有正常加载,请使用科学上网