无论如何要知道ssh到服务器的原始帐户的用户名?

我最初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以查看谁设置了连接。 这当然只有在你完全控制主机的情况下才有效,否则你可能会得到假的数据。