0

我在解决下面 Git 用户手册中讨论的主题时遇到了一些问题。任何详细说明或链接都会有所帮助。我找到了几个讨论这个的话题,但老实说,我在理解整体概念、编写语言等方面遇到了问题。

如果您允许每个人通过公钥身份验证与单个用户(如“git”)连接,您可能必须为该用户提供一个外壳包装器,该外壳包装器根据公钥确定哪个用户正在连接,并设置环境指定该用户的变量。在这里,我假设连接用户位于 $USER 环境变量中,因此您的更新脚本首先收集您需要的所有信息:

从这里引用

编辑:在弄清楚我需要用来查看远程用户传入的 SSH 密钥的命令时遇到问题。此外,我不知道如何遍历 authorized_keys 文件以匹配密钥。有没有关于这个问题的文件?

4

2 回答 2

2

Gitolite将授权层添加到 git 作为 ssh 上的服务器,它很好地解释了它是如何工作的。

从本质上讲,gitolite 工具依赖于向authorized_keys. 在这种情况下,该command选项告诉sshd它不应使用与 user 的默认 shell 不同的命令git。该命令本身包含一个唯一字符串,用于标识使用此特定密钥登录的用户。

我自己的 gitolite 实验的例子:

command="/Users/git/bin/gitolite-shell hlangeveld",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA... hlangeveld@...

请注意选项字符串如何包含多个选项,这些选项应防止出于不同目的滥用 git 帐户。您也不需要gitolite专门,但它已自动创建新的密钥条目。

于 2013-09-30T20:45:25.520 回答
2

包装脚本只是您调用的脚本,然后调用另一个脚本或程序。

这在 unix 中经常发生。

用户的外壳基本上是一个程序。因此,您也可以将其包装在脚本中。

如果你有一个用户'tom'。他会像这样出现在 /etc/passwd 中:

tom:x:91:91:Tom Mot:/home/tom:/bin/bash

但是tom其实是tom部门共享的账号。

因此,您想在 env 中设置一些变量,以识别 tom 部门的哪个成员正在登录。

为此,您可以将 /bin/bash 属性更改为 /bin/tom-wrapper

然后在该路径中添加一个脚本:

/bin/tom 包装器:

#!/bin/bash

KEY=$(figure out the ssh key the user used to log in) if [ $KEY == $tom_user_one ]; then
    USER="Tom User One"
    /bin/bash fi

if [ $KEY == $tom_user_two ]; then 
    USER="Tom User Two"
    /bin/bash fi

echo "You aren't the Tom I am looking for." exit 0

这是一个超级简单的脚本,它并不能完全满足您的需求,但可以演示理论。

记得 chmod +x 脚本。

然后当用户登录时,他们没有直接点击 bash,而是点击了你的脚本......这会找出这是哪个 tom 用户......设置和名为 user 的 env 变量标识用户,然后给用户一个 shell。

超级简化,但这是基本思想。

于 2013-09-30T20:31:19.547 回答