我最初git克隆了一个回购,当我推动我的工作,在接收后的钩子,我想检索原来acount的用户名谁推。
我知道$SSH_CONNECTION和$SSH_CLIENT给我的原始IP,但我找不到一个方法来获取原始帐户的用户名。
信息 :ssh连接使用公钥/无密码方法build立
我假设每个人都在git服务器上共享相同的用户,他们每个人都有自己的密钥login。
如果是这样的话,那么不用识别远程用户 ,就可以很容易地识别用户用来login到git服务器的公钥 。 要做到这一点,你应该允许PermitUserEnvironment在你的服务器的sshd_config ,然后你可以很容易地通过在environment="GIT_USER=username"添加前缀来识别每个公钥。 例如,git serve用户的authorized_keys文件可能如下所示:
environment="GIT_USER=bob" ssh-rsa AAA.....abc== bob@somehost environment="GIT_USER=sam" ssh-rsa AAA.....def== sam@otherhost
您可以自由select环境variables名称和用户标识符。
如果你使用的是gitolite ,那么$GL_USER就是你正在寻找的东西。
如果你正在使用gitosis ,你应该考虑切换到gitolite 。
不,除非你的git服务器也可以访问始发主机(通过ssh或其他),否则这些信息是不可用的。 在这种情况下,您可以在两台服务器上使用netstat来匹配端口,如下所示:
shost=$(echo $SSH_CONNECTION | cut -f1 -d' ') sport=$(echo $SSH_CONNECTION | cut -f2 -d' ') remotepid=$(ssh specialcheckuser@remote sudo netstat -ptn | sed -ne 's/.*$shost:$sport.*ESTABLISHED \([0-9]\+\).*/\1/p') remoteuser=$(ssh specliacheckuser@remote ps -o user --no-headers -$remotepid)
另一种可能性,如果你控制两个主机:好的旧identd。 您可以在始发主机上查询identd以查看谁设置了连接。 这当然只有在你完全控制主机的情况下才有效,否则你可能会得到假的数据。