当前位置: 首页 > news >正文

obsidian git操作及踩坑记录:ssh秘钥设置以及推送到多个远程仓库

使用obsidian git插件的时候,想着能不能同时推送到多个仓库,发现没找到设置插件这种功能的地方,我想着是不是每次推送的时候只能推送到默认名为origin的仓库,其他网站的不是origin的远程仓库就不能推送了,或者如果改了origin名之后就不能推送了。所以想着先改一下远程名试试

git修改远程

我想着将原始的origin改为
在 Git 中,修改已配置的远程仓库(remote)通常包括两种场景:修改远程仓库的 URL修改远程仓库的名称。以下是具体操作方法:

1. 先查看当前已配置的远程仓库

在修改前,建议先确认当前的远程仓库配置,避免误操作:

git remote -v

输出示例(显示远程名称和对应的 URL):

origin  https://github.com/oldname/oldrepo.git (fetch)
origin  https://github.com/oldname/oldrepo.git (push)

2. 修改远程仓库的 URL

如果远程仓库的地址变了(比如从 HTTP 换成 SSH,或仓库迁移到了新地址),可以用 git remote set-url 命令修改:

语法

git remote set-url <远程名称> <新的仓库URL>

示例
假设要把名为 origin 的远程仓库 URL 从 HTTPS 改为 SSH:

# 原 URL:https://github.com/yourname/yourrepo.git
# 新 URL:git@github.com:yourname/yourrepo.git
git remote set-url origin git@github.com:yourname/yourrepo.git

修改后,用 git remote -v 验证是否生效。

3. 修改远程仓库的名称

如果想给已有的远程仓库重命名(比如把 origin 改成 github),可以用 git remote rename 命令:

语法

git remote rename <旧名称> <新名称>

示例
把远程名称 origin 改成 github

git remote rename origin github

修改后验证:

git remote -v
# 输出会显示新名称对应的 URL
github  https://github.com/yourname/yourrepo.git (fetch)
github  https://github.com/yourname/yourrepo.git (push)

结果发现还是可以推送。说明软件不是根据origin来判断的,应该就是推送到最初设置的唯一默认仓库,然后如果想推送到其他仓库还需要自己再选择。然后我当时也没关了,想着先设置一下ssh保护。

配置obsidian

最开始使用了obsidian的git插件,发现还挺方便。后来出于安全考虑,考虑使用ssh的方式,但是推送的时候老是报错:
在这里插入图片描述

Hi Anonymous (DeployKey)! You’ve successfully authenticated, but GITEE.COM does not provide shell access.
Note: Perhaps the current use is DeployKey.
Note: DeployKey only supports pull/fetch operations
Hi xx! You’ve successfully authenticated, but GITEE.COM does not provide shell access.
分析了一下原因,这是因为要想实现推送的话,自己的公钥必须和gitee个人账户关联(就是说生成密钥的时候要使用gitee绑定的邮箱,要不然无法推送,这样确实安全一些,要不然是个人如果知道你的地址就能推送了,必须邮箱和账户一致才行)

你遇到的这个提示,核心原因是当前使用的是 Gitee 的 DeployKey(部署公钥),而 DeployKey 本身就是只读权限的密钥,仅支持拉取(pull)或获取(fetch)代码,不允许推送(push)操作。

具体解释:

  • Hi Anonymous (DeployKey)! You've successfully authenticated:说明 SSH 认证成功了,但系统识别出你用的是 DeployKey。
  • DeployKey only supports pull/fetch operations:明确提示 DeployKey 仅支持拉取/获取,不支持推送。

解决方法:用「个人 SSH 密钥」替代 DeployKey

要实现 SSH 推送,需要使用关联到你 Gitee 个人账户的 SSH 密钥(而非仓库的 DeployKey),步骤如下:

1. 检查并删除现有 DeployKey(可选)

如果仓库中已配置了 DeployKey,可先删除(避免冲突):

  • 进入 Gitee 仓库 → 「管理」→「部署公钥」→ 找到对应 DeployKey 并删除。
2. 生成个人 SSH 密钥(如果没有)

打开终端(或 Git Bash),执行以下命令生成个人密钥(推荐更安全的 Ed25519 算法):

ssh-keygen -t ed25519 -C "你的Gitee绑定邮箱@example.com"
  • 按提示回车(默认路径、空密码即可,或设置密码增强安全性)。
  • 生成后,私钥在 ~/.ssh/id_ed25519(Linux/macOS)或 C:\Users\你的用户名\.ssh\id_ed25519(Windows),公钥是同目录下的 id_ed25519.pub
3. 将个人公钥添加到 Gitee 个人账户
  • 查看公钥内容:
    # Linux/macOS
    cat ~/.ssh/id_ed25519.pub# Windows(Git Bash中)
    cat /c/Users/你的用户名/.ssh/id_ed25519.pub
    
  • 复制输出的完整公钥字符串(以 ssh-ed25519 开头,包含邮箱的部分)。
  • 登录 Gitee → 点击右上角头像 →「设置」→「安全设置」→「SSH 公钥」→ 粘贴公钥,填写一个标题(如“我的笔记本”)→ 点击「确定」。
4. 验证个人 SSH 密钥配置

终端执行以下命令,测试是否能通过个人密钥认证:

ssh -T git@gitee.com
  • 若返回 Welcome to Gitee, [你的Gitee用户名]!,说明配置成功(此时已不是 Anonymous (DeployKey))。
5. 更新仓库的远程 URL(如果之前用的是 DeployKey 对应的地址)

如果仓库之前关联的远程 URL 是基于 DeployKey 的,直接用新的个人密钥推送即可(无需修改 URL)。若推送仍失败,可重新设置远程 URL:

# 查看当前远程 URL
git remote -v# 若地址正确(如 git@gitee.com:用户名/仓库名.git),无需修改;若不正确,重新设置:
git remote set-url origin git@gitee.com:你的用户名/你的仓库名.git

完成后,再次执行 git push origin 分支名 即可通过 SSH 推送代码,因为个人 SSH 密钥关联了你的 Gitee 账号,拥有仓库的读写权限(前提是你对该仓库有推送权限,如仓库所有者、协作者等)。
这条提示是正常的成功认证信息,并非错误,具体含义如下:
重新用自己账号生成了一下gitee秘钥之后,信息如下:

xxx,but GITEE.COM does not provide shell access.我以为又有问题,又查了一下,发现这是 Gitee 的正常限制——代码托管平台(如 Gitee、GitHub)只允许通过 Git 命令(git push/pull 等)操作仓库,不提供交互式的 shell 登录权限(比如无法通过 ssh git@gitee.com 直接登录到 Gitee 的服务器终端)。
但是这条提示完全不影响你的 Git 操作,你可以正常执行:

  • 拉取远程代码:git pull origin 分支名
  • 推送本地代码:git push origin 分支名

成功推送,没有任何问题啦!

配置obsidian 其他远程仓库

设置ssh成功之后,我又想到推送到多个远程仓库的问题了。刚开始只配置了一个gitee,但是怕它哪一天倒闭了,所以我想着能不能再配置多个远程仓库,一次性将代码推送到gitee,gitcode还有github,数据无忧。然而,还是前面那个问题,使用前面相同的方式配置了gitcode之后,我在本地仓库中用git remote add添加了gitcode的仓库。但是在obsidian中推送的时候,发现怎么推送都还是推送到gitee,不管该不该origin名都没用,我想着应该是每次都推送到一个之前默认的位置,和名称无关,这软件肯定有一个选项能够将默认推送位置更改了。在AI上、百度上问了半天也没搞懂。最后我觉得遇到这种情况应该从源头考虑,那就是查找这个插件原始的功能说明,而不是自己乱找。后来我就找到了插件中的一个功能:
在这里插入图片描述
设置上游分支! 原来是这样~
选择界面:
在这里插入图片描述
在只有一个仓库的情况下,这个插件会选择唯一默认的仓库,如果有两个仓库的时候,如果你不选的话,还会默认用之前的那个仓库(不管是什么名称),所以需要用这个功能重新设置一下。

但是这个插件有一点不足就是一次性只能推送一个仓库,不能同时向多个仓库推送。不过也没关系,反正也不是想着实时同步,哪次想推送了自己手动推送一下就行了,快捷选择界面还是比较方便的。

http://www.dtcms.com/a/410351.html

相关文章:

  • 【Linux】网络部分——网络基础(Socket 编程预备)
  • 【音频】SIP服务器Yate搭建
  • 贵阳网站建设宏思锐达网站挂服务器后图片不显示
  • @tanstack/react-query:React 服务器状态管理与数据同步解决方案
  • RCNN系列边界框回归损失函数
  • 郑州专业网站制作建设python基础教程雪峰
  • Go基础:文件与文件夹操作详解
  • 鸿蒙:侧边栏显示与隐藏
  • 【开题答辩实录分享】以《基于爬虫的娱乐新闻采集系统设计与实现》为例进行答辩实录分享
  • BMAD方法论与自动化工具的协同演进:重塑Go语言微服务的技术债务
  • 月匣 - 百度推出的AI情感陪伴与剧情互动应用
  • dw网站建设教程网站建设费税率
  • 网站样版风格排版WordPress超级链接不跳转
  • Redis 五大核心数据结构知识点梳理
  • 微信小程序学习(一)
  • 零售企业档案检索慢?档案管理系统解决档案管理痛点
  • Docker 全阶段学习指南
  • Arbess从入门到实战(3) - 使用Arbess+GitLab实现Vue.js项目自动化部署
  • 智慧停车大屏数据分析与设计文档
  • 网站建设商家注册免费
  • 做网站后台系统的规范个人小程序商城
  • Linux 进程程序替换
  • 铜钟音乐前端技术解析
  • Flutter 运行IOS真机,提示无法打开“****”
  • Windows配置C/C++环境:MinGW+Vscode
  • Docker安装(Centos/Ubuntu/UOS)
  • 自动化运维利器:MCP Server + 阿里云
  • 常州公司建站模板网站怎么做定位功能
  • 网站弹窗代码网络游戏开发成本
  • Linux的网络基础