4

我问自己,那些 git 托管工具/站点如何知道哪个用户登录了。

我的意思是,您通过 SSH 登录git@github.com/... ,这意味着您以用户身份登录git

唯一能安全识别您为真实用户的信息是您的公钥。但是他们是如何计算出你的登录公钥的呢?

一种方法是查看此问题中显示的日志文件:

我可以找出用于访问帐户的 ssh 密钥吗? https://unix.stackexchange.com/questions/15575/can-i-find-out-which-ssh-key-was-used-to-access-an-account

但这意味着您必须将日志级别设置为 VERBOSE,但是我安装了 Gitlab,并且日志级别为 INFO,并且在任何地方都没有覆盖 sshd_config。

简而言之:如果您通过 SSH 在 Github 或 gitlab 登录,它会告诉您:

ssh git@github.com PTY 分配请求在通道 0 上失败

嗨用户名!您已成功通过身份验证,但 GitHub 不提供 shell 访问权限。

与 github.com 的连接已关闭。

但是当我以 git 登录时,github 怎么知道我是 USERNAME?

编辑:

我知道我的密钥和我的帐户之间存在映射,但是 gitolite(或(例如)gitolite-shell 必须以某种方式知道我的公钥,这个密钥是如何传递到 toe gitolite shell 的?

它必须以某种方式找出此会话中使用的 ssh-public-key,这是我的问题的关键,它如何知道用于登录的 ssh-key

4

3 回答 3

4

~git/.ssh/authorized_keys关于 gitolite(它取代了过时的 gitosis),它知道你是谁,因为你在 gitolite 服务器文件中注册了你的 id 以及你的公共 ssh ket 。

请参阅“ gitolite 之类的程序如何工作? ”。

该文件包含以下行:

command="[path]/gitolite-shell sitaram",[more options] ssh-rsa AAAAB3Nt...

这意味着 ssh 会话将gitolite-shell使用代表您的 id 的参数进行调用。

config user.name这与您用于提交的内容无关。
它与您使用的身份验证机制(https 或 ssh)有关,然后通过gitolite 等授权层传递。

GitHub 有自己的授权层(不同于 gitolite),但思路是一样的(登录名关联到 ssh 公钥)。

于 2013-08-03T14:29:43.773 回答
1

它知道是因为您的 SSH 密钥,但在提交中 USERNAME 被用于您的本地 git 配置。因此,来自一个键的所有提交都将分配给您的帐户,但提交中出现的名称可以是任何名称。

您的密钥在 github 服务器上添加到 git user .ssh 然后在 push hook 上它检查真正 github 用户的密钥

于 2013-08-03T14:28:48.540 回答
1

好的,我在您的帖子的帮助下弄清楚了:

gitolite-shell(可能是 gitlab 中的类似方式)知道我是哪个用户,因为 SSH 强制命令

因此,您可以根据您的公钥定义登录后执行的命令

正是 VonC 所说的,但对我来说还不够清楚:D

command="[路径]/gitolite-shell sitaram",[更多选项] ssh-rsa AAAAB3Nt..

这行意味着,如果用户使用特定的 SSH 密钥登录,则使用参数 sitaram 调用 gitolite-shellssh-rsa AAAAB3Nt..

我在我的 gitlab 安装中查看了 authorized_keys,瞧: command="/home/git/gitlab-shell/bin/gitlab-shell key-1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AAAAB3Nz...

于 2013-08-03T14:54:08.513 回答