我最初用 git 克隆了一个 repo,当我推送我的工作时,在 post-receive 钩子中,我想检索执行推送的原始帐户的用户名。
我知道$SSH_CONNECTION
并且$SSH_CLIENT
给了我原始 IP,但我找不到获取原始帐户用户名的方法。
信息:使用公钥/无密码方式建立ssh连接
答案1
我假设每个人都在 git 服务器上共享同一个用户,并且他们每个人都有自己的密钥登录。
如果是这样的话,那么与其确定远程用户,你可以轻松地识别公钥用户用来登录 git 服务器的文件。为此,您应该允许PermitUserEnvironment
服务器的sshd_config
,然后您可以通过在公钥前添加类似 的内容来轻松识别每个公钥environment="GIT_USER=username"
。例如,authorized_keys
git serve 用户的文件可能如下所示:
environment="GIT_USER=bob" ssh-rsa AAA.....abc== bob@somehost
environment="GIT_USER=sam" ssh-rsa AAA.....def== sam@otherhost
您可以自由选择环境变量名称和用户标识符。
答案2
不,除非您的 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)
答案3
另一种可能性是,如果您控制两台主机:老旧的 identd。您可以在发起主机上查询 identd,以查看是谁设置的连接。当然,这只有在您完全控制该主机时才有效,否则您可能会得到虚假数据。