Там должен был бы так или иначе знать имя пользователя учетной записи источника что ssh'ed в сервер?

Это собирается зависеть от того, каковы Ваши аппаратные средства.

Если Вы делаете это, абсолютно уверены, что Ваш сценарий испытывает таймаут за несколько секунд, иначе у Вас, вероятно, будет много администраторов, задающихся вопросом, почему некоторая машина в средстве соразмещения с другой стороны страны не возвратилась после обновления ядра.

Если Ваши аппаратные средства будут очень важны для процесса начальной загрузки (возможно, сетевой аппаратный ключ или карта памяти) затем, то это должно будет быть сделано ранее (вероятно, прежде чем новое ядро будет загружено). Иначе Вы хотели бы сделать его уже в возможном для проверки любых смонтированных сетью файловых систем, которые могли бы быть необходимы для компилятора, существуют. Это также поможет удостовериться, что MTA работает так, Ваш процесс сборки может послать корню электронное письмо, если модуль не мог бы быть создан по некоторым причинам.

3
задан 23 December 2012 в 17:24
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 ,

2
ответ дан 3 December 2019 в 06:11

Нет, эта информация никоим образом не доступна, если только ваш 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)
1
ответ дан 3 December 2019 в 06:11

Другая возможность, если вы управляете обоими хостами: старый добрый идент. Вы можете запросить идентификатор на исходном хосте, чтобы узнать, кто установил соединение. Это, конечно, работает только в том случае, если у вас есть полный контроль над этим хостом, иначе вы можете получить поддельные данные.

1
ответ дан 3 December 2019 в 06:11

Теги

Похожие вопросы