我对Git用户手册下面讨论的主题有些困惑。任何细节或链接都是有帮助的。我找到了几个讨论这个的主题,但老实说,我对整体概念、编写语言等等的理解都有问题。
如果你已经允许每个人通过公钥认证与一个用户(比如“git”)连接,你可能需要给予那个用户一个shell Package 器,它根据公钥来确定哪个用户正在连接,并设置一个环境变量来指定那个用户。这里我假设连接用户在$USER环境变量中,所以你的更新脚本首先要收集你需要的所有信息:
引自here
编辑:在确定查看远程用户传入的SSH密钥所需的命令时遇到问题。此外,我不知道如何迭代authorized_keys文件来匹配密钥。是否有关于此问题的文档?
2条答案
按热度按时间q43xntqr1#
Package 脚本只是一个脚本,您调用它后,它会调用另一个脚本或程序。
这在unix中相当常见。
用户的shell基本上是一个程序,所以你也可以把它 Package 在一个脚本中。
如果你有一个用户'tom',他会在/etc/passwd中显示如下:
汤姆:x:91:91:汤姆机器人:/home/汤姆:/bin/bash
但tom实际上是tom部门共享的帐户。
因此,您需要在env中设置一些变量,以标识tom部门的哪个成员正在登录。
为此,您可以将/bin/bash属性更改为/bin/tom-wrapper
然后在该路径中添加一个脚本:
/bin/tom-wrapper:
这是一个超级简单的脚本,并没有完全做到你想要的,但证明了理论。
请记住使用chmod +x组合键修改脚本。
然后,当用户登录时,他们不是直接点击bash,而是点击您的脚本......该脚本确定这是哪个tom用户......设置一个名为user的env变量来标识该用户,然后为该用户提供一个shell。
超级过度简化,但它是基本的想法。
agxfikkp2#
Gitolite为git添加了一个授权层,作为ssh上的服务器,它很好地解释了这个过程。
本质上,gitolite工具依赖于向authorized_keys中的每个条目添加选项的可能性。
在本例中,
command
选项告诉sshd
使用gitolite-shell
Package 器。命令本身包含一个唯一的字符串参数,用于标识该特定密钥的用户。除了command=选项,还包含了其他几个选项,这些选项(至少在十年前)应该可以保护系统免受任何滥用。来自我自己的gitolite实验的例子:
注意选项字符串中包含了几个选项,可以防止git账户被滥用于不同的目的。你也不需要特别指定
gitolite
,但它已经自动创建了新的密钥条目。