一、问题的定位
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的原因。