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