我刚刚设置了我的第一个本地 Gitea 服务器,除了 SSH 之外,一切都运行正常。普通 SSH 运行正常,但当我尝试与 Gitea 交互时却不行。
显示的 URL 是ssh://[email protected]:123/user/hello-world.git
为什么是“git@”?我的用户名不是“git”,但 Gitea 服务器以用户“git”的身份运行。如果我将“git”更改为我的真实用户名,我至少可以使用我的私有 SSH 密钥成功进行身份验证。我该如何修复该 URL 以显示正确的用户名?
然而,如果我尝试git clone
,我总是得到fatal: '/user/hello-world.git' does not appear to be a git repository
这是我的gitea/app.ini
文件:
[server]
ROOT_URL = https://gitea.xxx.local/
DOMAIN = gitea.xxx.local
HTTP_PORT = 3000
SSH_DOMAIN = gitea.xxx.local
SSH_PORT = 123
DISABLE_SSH = false
Gitea 仅在本地主机上监听,并且我使用 nginx 作为反向代理,:443
这:3000
对于 Web 来说很好,但对于 SSH 来说则不行。
openssh-server 正在监听:123
,我可以在那里成功验证。如何将 SSH 连接转发到内部 Gitea 服务器?还用 nginx 吗?
答案1
这是大多数 Git 服务器的正常和预期行为,看看 GitLab 为您提供的 SSH 克隆 URL,您会发现它也使用了 git 用户。
这是因为如果您的 git 服务器以 git 用户身份运行,它需要能够访问、查看、维护并最终删除存储库中的文件。
当您通过 Gitea 界面添加 SSH 密钥时,它会向没有 SSH 权限(端口转发、pty 等)的 git 用户添加授权密钥,并添加强制命令,该命令将回调 Gitea,让其知道哪个用户正在尝试访问哪个存储库。然后,它会决定如何处理它,是否授权它,并最终将信息传递给 Git 以合并到存储库中。
编辑:为了解决这个no repository
问题:再次强调,这是正常的,也是意料之中的,因为 git 存储库实际上位于 git 用户的主文件夹中。因此,当您尝试group/repo.git
从 git 用户访问时,该用户会扩展为绝对路径,/home/git/group/repo.git
但如果您以 身份登录user
,则该路径将扩展为/home/user/group/repo.git
可能不存在的路径,如果存在,则可能不一样。(用户主目录是示例,在生产中可能会有所不同)