git 上传 github报错 (Permission denied)


结论

  • ~/.ssh/config 中 Host 值可以随意写
  • cat .git/config[remote "origin"] url = git@B:test/demo.git url 值 @ 后面 冒号: 前面与 ~/.ssh/config 中 Host 值对应 ,如图:

在这里插入图片描述

起因

  • 我报了一个在线课程,每天网上学习,然后他家的课程不让下载;
  • 这就造成了一个困扰,每次地铁上看都是用的流量;
  • 这还不算完,后来,他家网站升级了;
  • 这一升级不要紧,微信看的话会闪退;手机浏览器 和 iPad 直接进行了微信授权的重定向看不了了;
  • 嗯…,很烦,课程很优质,技术不太行;
  • 于是我决定还是下载下来看,F12 看了一下请求地址,发现还不是一个单独的视频文件,也很正常;
  • 网上搜索了一下,找到了一个 :M3U8 Downloader(软件说明里的源码地址:https://github.com/nilaoda/M3U8-Downloader);
  • 试了试,发现,哈哈,真难用;顺着他的 github 网址,想看看代码,发现已经404了;
  • 于是直接在 github 上搜了一下;
  • 发现有两个项目 (地址:https://github.com/search?q=user%3Anilaoda+M3U8-Downloader)最后看了看 readme ,决定不用这个了;
  • 再次上网搜索,发现了 马赛克视频助手(mask);
  • 用了一下,发现不错,又能自动嗅探,又能合并,速度也很快;只是不能几个视频同时下载;
  • 然而好景不长,不到一个月,软件提示什么 为了更好发展,采用会员机制,刚开始还能直接忽略勉强下载下来;
  • 一个星期后基本下载不了了,就是一直提示 “会员机制”;
  • 于是我决定自己写一个程序,可控性高,有问题自己解决;
  • 就这样,利用周末时间,写了一个使用 web 界面下载的程序;
  • 目前已经基本成形,为了后期完善方便,我决定把它放到 github 上,方便多地同时开发;
  • 然后就碰到了(Permission denied) 的问题。

新建github仓库

在这里插入图片描述

本地仓库初始化

  • 先写好 .gitignore 文件
target/
.idea/
logs/
*.iml
  • git init
  • git config user.email “XXX@yyy.com” ( 不使用网上广泛流传的: git config --global user.email “XXX” ,因为我觉得全局配置太难用了 )
  • git config user.name “XXX”
  • git add .
  • git commit -m “first_commit”
  • git remote add origin git@github.com:test/demo.git
  • git push -u origin master : 执行到这一步就报错了,如下:
$ git push
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
  • 我首先想到了 publickey ,但是这个 key 我之前在别的项目已经配置过了;
  • cat ~/.ssh/config : 找到 IdentityFile 指定的私钥对应的位置,发现文件都在;
  • 去到 github 上一看,ssh keys 确实是一个都没有了,但是我记得配置过;
  • 难道是时间太久,github 给过期删除了?网上搜搜,也没找到明确的说法,不去管他了;
  • ssh-keygen -t rsa -C “XXX@yyy.com” : 同时指定好位置;并修改 ~/.ssh/config 文件
  • 又把 pub key 给上传了一遍 ,我以为应该解决了,执行 git push -u origin master 依旧报错,还是那个错;
  • ~/.ssh/config 文件内容
# A(A@xx.com)
#Host github.com
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_A
User git

# B(b@xx.com)
Host B
#HostName github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_B
User git

  • 执行 ssh -Tv git@github.com : 有一行关键的信息
debug1: Reading configuration data /c/Users/Administrator/.ssh/config
debug1: /c/Users/Administrator/.ssh/config line 3: Applying options for github.c                                                                                                                                   om
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to github.com [13.229.188.59] port 22.
debug1: Connection established.
debug1: identity file /c/Users/Administrator/.ssh/id_rsa_A type 0
...
  • 最后一行表明 使用了 id_rsa_A ,而我想让它使用 id_rsa_B;
  • ssh -Tv git@github.com : @后面的内容与 ~/.ssh/config 中host对应

在这里插入图片描述

  • 也就是说 如果使用 ssh -Tv git@B :就会使用 id_rsa_B;
  • cat .git/config 内容如下:
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[user]
        name = XXX
        email = XXX@yyy.com
[remote "origin"]
        url = git@github.com:test/demo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

# 下面两行实际并不存在,在 git push -u origin master 执行成功后会添加        
[branch "master"]
        remote = origin
        merge = refs/heads/master

  • [remote "origin"] url = git@github.com:test/demo.git 的url 改成 [remote "origin"] url = git@B:test/demo.git
  • 执行 git remote set-url origin git@B:test/demo.git ,或vim直接修改
  • 再次 git push -u origin master 执行成功;
  • 实际整个过程耗费了很长时间,原因是,我有一个和当前遇到问题的项目连接的同一个github用户的 项目,那个项目(称为old)开始 也是 (Permission denied)但在配置好 pubkey 后就好了,所以我百思不得其解;
  • 实际old 项目在两年前甚至更久之前执行过 git remote set-url origin git@B:test/xxx.git ,但由于时间太久,这码事忘的死死的;
  • 而新公司不用 git 渐渐就生疏了,实际 ~/.ssh/config 文件非常长,我只是取了一部分并去掉了敏感信息
  • 写这里也是为了加强印象,时不时看到就会想起来,防止以后再像这次一样浪费这么长时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值