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上、百度上问了半天也没搞懂。最后我觉得遇到这种情况应该从源头考虑,那就是查找这个插件原始的功能说明,而不是自己乱找。后来我就找到了插件中的一个功能:
设置上游分支! 原来是这样~
选择界面:
在只有一个仓库的情况下,这个插件会选择唯一默认的仓库,如果有两个仓库的时候,如果你不选的话,还会默认用之前的那个仓库(不管是什么名称),所以需要用这个功能重新设置一下。
但是这个插件有一点不足就是一次性只能推送一个仓库,不能同时向多个仓库推送。不过也没关系,反正也不是想着实时同步,哪次想推送了自己手动推送一下就行了,快捷选择界面还是比较方便的。