备份本地git库到GitHub时在能够ssh成功但是无法push的错误的解决

一、问题的定位

      ssh能够与远程GitHub成功连接:

yuhuiliu@sinc-server:/$ ssh -T [email protected]  
The authenticity of host 'github.com (52.74.223.119)' can't be established.  
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.  
Are you sure you want to continue connecting (yes/no)? yew  
Please type 'yes' or 'no': yes  
Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts.  
packet_write_wait: Connection to 52.74.223.119 port 22: Broken pipe 
    但是在git push -u origin master时报出如下的错误:
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

二、问题的原因

    参照https://segmentfault.com/q/1010000004627442,https://segmentfault.com/q/1010000003061640

    问题产生可能的原因:

    1、检查 git status,确认本地repository的存在:

yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git status
位于分支 master
无文件要提交,干净的工作区

    2、检查 git config,确认本地配置是否有误:

yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git config --list
[email protected]
user.name=vslyu
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true

    3、绑定的origin库设置的是http,而GitHub支持的是https连接。

使用git remote -v查看,我使用的是ssh命令支持的连接方式,转换的话需要将ssh协议的地址连接转换成https协议的地址,这样push时采用就是https协议,认证的时候是ssh协议。

yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git remote  -v
origin  [email protected]:vlsyu/weekly-report.git (fetch)
origin  [email protected]:vlsyu/weekly-report.git (push)
    4、~/.ssh文件可能配置有误,删除~/.ssh文件重新配置:
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo mv ~/.ssh ~/.ssh_bck20180517
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo ssh-key -t rsa -C "[email protected]"
sudo: ssh-key:找不到命令
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ^Z
[1]+  已停止               sudo ssh-keygen -t rsa -C "[email protected]"
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$  ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yuhuiliu/.ssh/id_rsa):
Created directory '/home/yuhuiliu/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/yuhuiliu/.ssh/id_rsa.
Your public key has been saved in /home/yuhuiliu/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vyZsMF4iXMLzk2l+EJ+bHbxXFe2+HQ7wpy9IOqMX+7o [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|                .|
|               ..|
|   .           ..|
|    + o    .    o|
|   . = =So  o  o |
|    o @ +oo. o.o.|
|     = O +*o..= +|
|      o B*+o.o o.|
|       +oEBo  o. |
+----[SHA256]-----+
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo gedit ~/.ssh/id_rsa.pub
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo gedit ~/.ssh/id_rsa.pub
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ^Z
[2]+  已停止               sudo ssh-keygen -t rsa -C "[email protected]"
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ ssh -T [email protected]    The authenticity of host 'github.com (13.229.188.59)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,13.229.188.59' (RSA) to the list of known hosts.
X11 forwarding request failed on channel 0
Hi vlsyu! You've successfully authenticated, but GitHub does not provide shell access.
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ ssh-agent -s
SSH_AUTH_SOCK=/tmp/ssh-NuigiOEtX2mw/agent.1014; export SSH_AUTH_SOCK;
SSH_AGENT_PID=1015; export SSH_AGENT_PID;
echo Agent pid 1015;
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo git push -u origin master
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

    还是报错,且使用重新配置的id_rsa.pub后,ssh -T [email protected]也是正常连接的。

    泪奔了,还是还没有找到bug在哪里。安装上面的步骤再走一遍,实在不行换成https协议再试。看啊看,是不是git --config下的user.name和git remote -v下的有点不对:

yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git config --list
[email protected]
user.name=vslyu
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git remote  -v
origin  [email protected]:vlsyu/weekly-report.git (fetch)
origin  [email protected]:vlsyu/weekly-report.git (push)

    我去,坑死了,打反了字母。

三、问题的解决

   1、修改GitHub中的username

        打开个人界面的“Accounts”,找到“Change Username”进行修改,会出现如下提示:


    上面提示的意思就是以前的profile page和Pages site不再保留。

    2、更改本地库绑定origin的url

yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git remote remove origin
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git remote -v
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git remote add origin [email protected]:vslyu/weekly-report.git
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git remote -v
origin  [email protected]:vslyu/weekly-report.git (fetch)
origin  [email protected]:vslyu/weekly-report.git (push)
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo git push -u origin master
[sudo] yuhuiliu 的密码:
Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

    依然有报错。

    使用https进行连接:

yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git remote remove origin yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git remote add origin https://github.com/vslyu/weekly-report.git
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git remote -v
origin  https://github.com/vslyu/weekly-report.git (fetch)
origin  https://github.com/vslyu/weekly-report.git (push)
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$  git push -u origin master
Username for 'https://github.com': git
Password for 'https://[email protected]':
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/vslyu/weekly-report.git/'
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$  git push -u origin master
Username for 'https://github.com': vslyu
Password for 'https://[email protected]':
To https://github.com/vslyu/weekly-report.git
 ! [rejected]        master -> master (fetch first)
error: 无法推送一些引用到 'https://github.com/vslyu/weekly-report.git'
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwa
    提示push被rejected,因为远程GitHub的仓库包含本地不存在的文件(好像我创建远程仓库时建的readme.txt文件没有更新到本地仓库),需要git pull下来再提交:
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git pull
warning: no common commits
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 9 (delta 2), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (9/9), 完成.
来自 https://github.com/vslyu/weekly-report
 * [新分支]          master     -> origin/master
当前分支没有跟踪信息。
请指定您要合并哪一个分支。
详见 git-pull(1)。

    git pull <remote> <branch>

如果您想要为此分支创建跟踪信息,您可以执行:

    git branch --set-upstream-to=origin/<branch> master

yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ ls -ah
.  ..  .git  周报-20180506-刘宇辉.docx
    参照https://blog.csdn.net/qq_30581017/article/details/79004665,指定远程pull的分支重新pull,pull时候需要commit一下explain:
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ git pull  origin master
来自 https://github.com/vslyu/weekly-report
 * branch            master     -> FETCH_HEAD
Merge made by the 'recursive' strategy.
 README.md | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 README.md
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ ls -ah
.  ..  .git  README.md  周报-20180506-刘宇辉.docx
    显示已经成功合并,再把本地的仓库push上去:
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$ sudo git push -u origin master
Username for 'https://github.com': vslyu
Password for 'https://[email protected]':
对象计数中: 5, 完成.
Delta compression using up to 40 threads.
压缩对象中: 100% (5/5), 完成.
写入对象中: 100% (5/5), 73.56 KiB | 0 bytes/s, 完成.
Total 5 (delta 0), reused 0 (delta 0)
To https://github.com/vslyu/weekly-report.git
   d44d71d..e7d1ba7  master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
yuhuiliu@sinc-server:/media/vslyu-flash/weekly-report$

    再查看一下GitHub上面的提交:



    这里显示已经使用https成功push,虽然麻烦了点,每次push的时候都需要输入GitHub的username和password,但总算还是push上了的。下次有机会再来仔细分析一下ssh无法push的原因。

 
 

猜你喜欢

转载自blog.csdn.net/vslyu/article/details/80356939
今日推荐