Git SSH 方式无法 push 踩坑

引言

我们知道使用 git 管理的项目可以通过两种格式的 url 来获取,分别是 HTTPSSH

  • 使用 HTTP 方式操作 git 工程需要输入对应的账号和密码,当然为了方便也可以使用诸如 TortoiseGit 这样的图形化工具来管理 Git 工程,而且其中自带记住账号和密码的功能,因此只需输入一次账号密码即可。

  • 使用 SSH 的方式拉取 Git 项目则需要提前配置好 SSH key ,也就是我们常说的公钥和私钥

 

遇到的问题

假如直接在本地安装 Git 之后,使用 ssh-keygen 去生成公钥和秘钥,然后把用户目录下的 .ssh 目录中 id_rsa.pub 文件中的内容配置到目标项目的部署秘钥中,例如 Gogs 中:项目右上角的 仓库设置 ——> 管理部署密钥 ,然后添加上面生成的公钥内容。

SSH url 的格式 :git@xxx:xxx/xxx.git

发现可以 git clone 拉取工程 ,也可以通过 git pull 更新工程,但是没办法 git push 到远端仓库,提示如下:

Gogs: Key permission denied
fatal: Could not read from remote repository.
​
Please make sure you have the correct access rights
and the repository exists.

 

正确配置

正确的方式是将公钥内容添加到 账户设置 ——> SSH 秘钥中,这才是真正配置 SSH 的地方,直接将其配置到项目中的话,就会出现只能 pull 不能 push 的问题。

 

TortoiseGit 配置

Settings ——> General ——> Re-run First Start Wizard (中文版:鼠标右键 ——> 常规设置 ——> 重新运行首次启动向导)然后一直 next 直到 Authentication and credential store 页面,这里有两种方式 :TortoiseGitPlink (默认)和 OpenSSH ,区别其实就是依赖的客户端不同,使用时也有所区别:

  • 选择 OpenSSH 的方式只要使用了 ssh-keygen 生成了公钥和私钥即可用;

  • 选择 TortoiseGitPlink 则需要使用 PuTTYgen.exe 工具生成 .ppk 文件,然后再使用 Git 自带的工具 Pageant.exe开始\所有程序\TortoiseGit)去添加之前创建的 .ppk 文件才可使用。

Git SSH 方式无法 push 踩坑_第1张图片


参考

  • Gitlab添加SSH key可以pull不能push的问题

  • 服务器上的 Git - 生成 SSH 公钥


微信公众号「何乐不为呢」,一个码农的技术笔记和唠叨。

 

你可能感兴趣的:(技术笔记)