我在围绕Git用户手册中讨论的主题时遇到了问题。任何详细说明或链接都会有所帮助。我发现了一些讨论这个问题的话题,但老实说,我在理解整体概念,要编写的语言等方面存在问题。
如果您允许每个人与单个用户建立联系(例如" git") 通过公钥验证,您可能必须为该用户提供shell 包装器,根据公众确定哪个用户正在连接 键,并设置指定该用户的环境变量。我在这 假设连接用户在$ USER环境变量中,所以 您的更新脚本首先收集您需要的所有信息:
引自here
编辑:有问题找出我需要用来查看远程用户传入的SSH密钥的命令。此外,我不知道如何遍历authorized_keys文件以匹配密钥。有没有关于此事的文件?
答案 0 :(得分:2)
包装器脚本只是您调用的脚本,然后调用另一个脚本或程序。
在unix中经常这样做。
用户的shell基本上是一个程序。所以你也可以将它包装在一个脚本中。
如果您有用户'tom'。他会出现在/ etc / passwd中:
tom:x:91:91:Tom Mot:/ home / tom:/ bin / bash
但汤姆实际上是汤姆部门共享的帐户。
所以你想在env中设置一些变量来识别tom dept的哪个成员正在登录。
您可以通过将/ 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用户是... set和env变量名为user识别用户,然后给用户一个外壳
超级简化,但这是基本的想法。
答案 1 :(得分:1)
Gitolite,它通过ssh向git添加授权层作为服务器,对this works的方式有很好的解释。
在本质上,gitolite工具依赖于为authorized_keys
中的每个条目添加选项的可能性。在这种情况下,command
选项告诉sshd
它不应该使用与用户git
的默认shell不同的命令。该命令本身包含一个唯一的字符串,用于标识使用此特定密钥登录的用户。
来自我自己的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
专门,但它已自动创建新的密钥条目。