Shell Wrapper:哪个用户连接VIA SSH

时间:2013-09-30 19:28:12

标签: git shell unix ssh

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

  

如果您允许每个人与单个用户建立联系(例如" git")   通过公钥验证,您可能必须为该用户提供shell   包装器,根据公众确定哪个用户正在连接   键,并设置指定该用户的环境变量。我在这   假设连接用户在$ USER环境变量中,所以   您的更新脚本首先收集您需要的所有信息:

引自here

编辑:有问题找出我需要用来查看远程用户传入的SSH密钥的命令。此外,我不知道如何遍历authorized_keys文件以匹配密钥。有没有关于此事的文件?

2 个答案:

答案 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专门,但它已自动创建新的密钥条目。