为什么我无法使用 Kerberos 通过 SSH 访问 gitea

问题描述 投票:0回答:1

我在虚拟机中运行 gitea,并在网络中使用 kerberos 进行 SSH 身份验证。 就目前情况而言:

  • 我的日常驱动程序中有普通用户 (
    foo
    )
  • gitea 服务器有两个相关用户:
    foo
    gitea
    。后者是运行gitea进程的用户。

为了 ssh 进入服务器,我获得一个 TGT 作为主体

foo@LOCALDOMAIN
,这允许我以
foo
的身份 ssh 进入 gitea 服务器。我还在
.k5login
用户的主目录中添加了一个
gitea
文件,将
foo@LOCALDOMAIN
指定为有效主体,这意味着我还可以使用此主体作为
gitea
用户向服务器进行身份验证。

因此,我希望能够与上游 URL 为:

[email protected]:foo/repo_name.git
的 gitea 存储库进行交互。相反,在获取 TGT 之前,错误是:

[email protected]: Permission denied (publickey,gssapi-with-mic).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

并且获取TGT后,错误是:

fatal: 'foo/repo_name.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.
git ssh kerberos gssapi gitea
1个回答
0
投票

在获取TGT之前,错误是:

[email protected]: Permission denied (publickey,gssapi-with-mic).

这很正常,因为您没有 TGT(以及 host/gitea.localdomain 的服务票证),因此无法通过 Kerberos 进行身份验证。

并且获取TGT后,错误是:

fatal: 'foo/repo_name.git' does not appear to be a git repository

发生这种情况是因为这些存储库实际上并不直接存在于

~gitea/
主目录中。公钥身份验证在这里还有一个额外的目的:
~gitea/.ssh/authorized_keys
文件的每个密钥都有一个自定义命令,这会强制您的远程“git”命令通过包装脚本 - 该脚本将 Git 操作重定向到另一个位置,并且当不同的 Gitea 用户都通过相同的 SSH 帐户进入时,服务器如何区分这些用户(即包装器脚本强制执行每个存储库的权限)。

但是当您使用 GSSAPI 身份验证时,这一切都被绕过了。

为了在这里使用 Kerberos,您需要一个自定义包装器 - 通过全局

sshd_config
为 gitea 用户定义 - 它将查看
$SSH_USER_AUTH
并相应地运行 Gitea 包装器。

GSSAPIAuthentication yes
ExposeAuthInfo yes
[...]
Match user gitea
    ForceCommand /usr/local/bin/kerbgitea

(就我个人而言,在单用户系统中,我不使用 Gitea 或类似的东西;只是直接访问存储库。)

© www.soinside.com 2019 - 2024. All rights reserved.