有没有办法知道通过 ssh 进入服务器的原始账户的用户名?

有没有办法知道通过 ssh 进入服务器的原始账户的用户名?

我最初用 git 克隆了一个 repo,当我推送我的工作时,在 post-receive 钩子中,我想检索执行推送的原始帐户的用户名。

我知道$SSH_CONNECTION并且$SSH_CLIENT给了我原始 IP,但我找不到获取原始帐户用户名的方法。

信息:使用公钥/无密码方式建立ssh连接

答案1

我假设每个人都在 git 服务器上共享同一个用户,并且他们每个人都有自己的密钥登录。

如果是这样的话,那么与其确定远程用户,你可以轻松地识别公钥用户用来登录 git 服务器的文件。为此,您应该允许PermitUserEnvironment服务器的sshd_config,然后您可以通过在公钥前添加类似 的内容来轻松识别每个公钥environment="GIT_USER=username"。例如,authorized_keysgit serve 用户的文件可能如下所示:

environment="GIT_USER=bob" ssh-rsa AAA.....abc== bob@somehost
environment="GIT_USER=sam" ssh-rsa AAA.....def== sam@otherhost

您可以自由选择环境变量名称和用户标识符。

如果你正在使用吉托莱特, 然后$GL_USER就是你要找的。

如果你正在使用吉托西斯,你应该考虑切换到吉托莱特

答案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,以查看是谁设置的连接。当然,这只有在您完全控制该主机时才有效,否则您可能会得到虚假数据。

相关内容