文章

小乌龟使用debug记录(附小乌龟使用步骤总结)

小乌龟使用步骤总结

小乌龟只是简化了项目中后期的仓库管理操作;而仓库最开始的初期配置,还是需要我们通过git bash手动进行配置

  1. 本地创建仓库:文件夹中 -> 右键,小乌龟“创建本地存储库”;

  2. 关联本地仓库&远程仓库:

    git bash 中执行 git remote add <远程仓库本地代称> <远程仓库 SSH 链接>
    执行完后,通过执行 git remote -v 检查是否关联成功。

    Adding a remote repository - Github Docs

  3. 克隆仓库:在 git bash 中执行 git clone <远程仓库 SSH 链接>

之后就可以进行正常的仓库推拉了(大概)

debug记录

【2025/03/16 ~ 2025/03/17】

背景介绍

我尝试通过 SSH 方式进行文件传输。

  • 本地仓库已和远程仓库关联。
    说明:执行 git remote -v 后,会显示远程仓库的本地代称、推拉链接。
  • 已配置小乌龟 PuTTY 密钥。
    说明:通过(小乌龟配套下载的)PuTTYgen 工具生成 PuTTY 密钥,并配置到远程仓库和小乌龟( .ppk 密钥文件)。 SSH 客户端设为 TortoiseGitPlink 。

问题:当我试图通过小乌龟的“获取”来同步本地仓库&远程仓库时,发现小乌龟显示了执行fetch命令后:

1
git.exe fetch --progress -v --"origin" master...

就卡住不动了,也未成功拉取到远程仓库中的文件。

debug记录

最后解决得比较莫名其妙,主要就将debug过程 & 注意到的点记录一下。

一、查看小乌龟文档

小乌龟的文档对GUI界面进行了详细说明。
设置 - Git - 远端:TortoiseGit’s Settings – TortoiseGit – Remote

但小乌龟的文档看的脑瓜疼。看了一会没啥有用的,就没继续看了。

二、Git Bash测试

因为小乌龟没有显示任何可供 debug 的详细信息,于是我重新试用 git bash,测试 SSH 连接能否成功建立。
包括配对 SSH 密钥(git bash 通过 OpenSSH 生成密钥)、配置 ~/.ssh/config 文件……

三、查看远程仓库文档

发现这个仓库是基于一个叫做“Gogs: A painless self-hosted Git service”的服务搭建的,遂查看仓库文档。
但是冇有用:故障排查 - Gogs

四、怀疑密钥匹配类型

因为以下错误信息:

1
Unable to negotiate with ...: no matching host key type found. Their offer: ssh-rsa

怀疑到了密钥类型不正确——因为我想到了 SSH 密钥生成时,有分为“RSA”和“SSH-1 (RSA)”两个种类。

后面其实不是(GPT前后两天的回答不一样,以后谨慎辨别)。

五、继续Git Bash测试

git错误&测试指导:Error: Permission denied (publickey) - GitHub Docs

执行命令,查看 SSH 连接时的详细 debug 信息

1
$ ssh -vT git@git.wpsit.cn:2222

折腾了一会:

你遇到的问题是 OpenSSH 8.8 及以上版本默认禁用了 ssh-rsa,而服务器只支持 ssh-rsa。(因为不安全) 解决方案是 手动启用 ssh-rsa 作为 Host Key 类型

设置 ~/.ssh/config

按着GPT的意思修修改改,最后成功的设置如下:

1
2
3
4
5
6
7
8
9
10
11
# wpsit
Host git.wpsit.cn
    Hostname 123.249.104.242
    Port 2222
    User git
    # 重点是下面三条
    # 永久允许ssh-rsa
    HostKeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa
    # 指定特定密钥
    IdentityFile ~/.ssh/jinShan2025Test_rsa

测试了半天连接,但一直没返回欢迎信息,还以为连接没成功。
——其实是成功了,标志如下:

1
2
3
4
Authenticated to 123.249.104.242 ([123.249.104.242]:2222) using "publickey".
debug1: channel 0: new session [client-session] (inactive timeout: 0)
debug1: Entering interactive session.
debug1: pledge: filesystem

最后尝试性的执行了$ git clone ssh://git@git.wpsit.cn:2222/ccnu-2026-cpp-tasks.git,莫名其妙就成功了?!然后小乌龟 push 也成功了……

### 总结

建立 SSH 连接并不难。中间很多次其实已经成功建立连接了,但我不知道——因为概念不明晰脑袋debug到懵掉了,很多时候绕了一大圈之后,发现某个“bug”其实很快就能搞定。

bugs:

(最后我还是没有成功使用小乌龟 fetch 过……之后再试试)

知识补充

常见 SSH 密钥类型

以小乌龟自带的 PuTTYgen 为例:

image-20250319212626856

  • RSA
  • DSA
  • ECDSA
  • EdDSA
  • SSH-1 (RSA)

关于小乌龟的PuTTY密钥

——总之就是一个 SSH 密钥管理工具。

官方文档说明如下:

小乌龟的 PuTTY 密钥管理工具会随着小乌龟客户端打包安装。包括:

  • TortoiseGitPlink:SSH 客户端,可于“设置 - 网络”中设置。
  • PuTTYgen:SSH 密钥生成器。

补充:PuTTY - 维基百科,自由的百科全书

小乌龟GUI补充说明

image-20250319214505355

  • 远端:远程仓库的本地代称,可通过git remote -v在 git bash 中检查。
  • URL/推送URL:远程仓库的 SSH 链接。
本文由作者按照 CC BY 4.0 进行授权