这是客户端中的配置: 〜/.ssh/config
Host myserver
HostName 172.2.1.1
User git
Port 22
IdentityFile ~/.ssh/id_ed25519_repo1
已通过 gitea web(SSH 密钥)成功添加并验证了密钥。
问题是我无法像这样访问 gitea 存储库:
git ls-remote myserver:user1/repo1.git
git ls-remote git@myserver:user1/repo1.git
//错误:
fatal: '/user1/repo1.git' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
但以下访问没有问题(不提示密码):
ssh git@myserver
git ls-remote http://ip:3000/user1/repo1.git
git ls-remote git@ip:user1/repo1.git
那么有哪些可能的解决方案呢?
我找到原因了。看似微不足道的问题,却不容易实现。
首先,我将解释每个命令为什么有效或无效。
以下内容有效,因为仅与 SSH shell 访问相关,与 git 无关。
ssh git@myserver
以下内容有效,因为 git 不使用 SSH。
git ls-remote http://ip:3000/user1/repo1.git
以下内容有效,因为 git+SSH 隐式加载“~/.ssh/id_ed25519”,我错误地认为密钥应该是“id_ed25519_repo1”,此外密钥“id_ed25519”是之前通过 gitea Web UI 配置的。
git ls-remote git@ip:user1/repo1.git
以下内容不起作用,因为 git+SSH 显式加载“~/.ssh/id_ed25519_repo1” - 密钥已手动添加到authorized_keys。
git ls-remote myserver:user1/repo1.git git ls-remote git@myserver:user1/repo1.git
因此,只需在文件中添加一个裸条目,如下所示,访问“ssh user1@myserver”或“ssh user1@real-ip”就可以很好地工作,但 git+SSH 绝对不起作用。
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIvf4l5RjqWL+kOnxpqhhGAIcIkWVSHqLbgkAzMAlYGm user1@domain
原因是缺少将 SSH 密钥链接到 git 操作的部分,这解释了为什么 SSH 身份验证正常但 git 无法识别存储库路径。 因此,将 git 连接到 SSH 的正确语法应如下所示:
command =“/usr/local/bin/gitea --config=/etc/gitea/app.ini serv key-6”,无端口转发,无X11转发,无用户rc,无-pty,限制 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAIvf4l5RjqWL+kOnxpqhhGAIcIkWVSHqLbgkAzMAlYGm user1@domain
手动编辑比较长,最好让 gitea 通过 Web UI 帮我们添加。但是出现了一个问题,自从“命令”进来后,使用“user1”进行SSH shell访问就变得不可能了。我不知道如何为同一用户同时启用 git+SSH 和 SSH 访问。我的解决方案是为纯 SSH 访问创建一个新密钥或考虑启用 PasswordAuthentication 选项。
我想分享的笔记: