Будет ли в любом случае знать имя пользователя учетной записи источника, которая 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)
Другие вопросы по тегам