Я изначально git клонировал репо, когда я нажимаю свою работу в ловушке post-receive, я хотел бы получить имя пользователя origin acount, который сделал push.
Я знаю $SSH_CONNECTION
и $SSH_CLIENT
дайте мне исходный IP-адрес, но я не могу найти способ получить имя пользователя исходной учетной записи.
Информация: Соединение ssh устанавливается с использованием открытого ключа / метода без пароля
Я предполагаю, что все используют одного и того же пользователя на сервере 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
Вы можете выбрать имя переменной среды и идентификатор пользователя.
Если вы используете гитолит, затем $GL_USER
это то, что вы ищете.
Если вы используете гитоз, вам следует подумать о переходе на гитолит.
Другая возможность, если вы управляете обоими хостами: старый добрый идентд. Вы можете запросить identityd на исходном хосте, чтобы узнать, кто установил соединение. Это, конечно, работает только в том случае, если у вас есть полный контроль над этим хостом, иначе вы можете получить поддельные данные.
Нет, эта информация никоим образом не доступна, если ваш сервер 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)