Мы используем git для отслеживания изменений в /etc/
на наших серверах.
Администраторы работают как root при изменении файлов в / etc /, поэтому их коммиты имеют автора
root <root@machinename>
Это не очень приятно, поскольку вы не можете увидеть, какой администратор на самом деле внес изменения.
Что мы можем сделать, чтобы получить настоящие имена администраторов в журнале git? Я не думаю, что сохранение локального клона репозитория возможно, поскольку мы часто меняем интерактивно, пока что-то не сработает, и цикл change-commit-push-seeError-repeat здесь не поможет.
На имя автора и коммиттера git можно влиять с помощью переменных среды GIT_COMMITTER_NAME
, GIT_COMMITTER_EMAIL
, GIT_AUTHOR_NAME
и GIT_AUTHOR_EMAIL
.
Теперь уловка состоит в том, чтобы отправить эти переменные на удаленный сервер при подключении через SSH:
Определите и экспортируйте переменные в свой ~/.bashrc
файл:
export GIT_AUTHOR_NAME="Christian Weiske"
Автоматически отправлять их через SSH-соединение, настроив ~/.ssh/config
:
SendEnv LANG LC_* GIT_*
LANG
и LC_*
не обязательны, но в Debian по умолчанию используется ssh_config, поэтому я подумал, что тоже должен отправить их
На удаленном сервере настройте sshd конфигурация в /etc/ssh/sshd_config
принять GIT_*
переменные среды:
AcceptEnv LANG LC_* GIT_*
Вуаля - а git commit
как корень в /etc/
приводит к:
commit 8a4654f13241f05361283a88ce041a0fc24b8ac6
Author: Christian Weiske <christian.weiske@netresearch.de>
В случае сбоя сервера когда-нибудь в будущем: http://cweiske.de/tagebuch/carry-git-settings.htm
Во-первых, и не имеющий отношения к вашему вопросу, я настоятельно рекомендую вам срочно прекратить использовать root
логины и su
и использовать логины пользователей и sudo
вместо. Ограничьте свой root
вход только в консоль или даже не в этом.
Тем не менее, git commit
имеет --author
вариант, который может вам помочь:
# git commit --author='Author Name <author@email.address.com>' -a
Вы также можете осторожно использовать переменные среды для каждого пользователя, чтобы установить GIT_AUTHOR_NAME
и GIT_AUTHOR_EMAIL
переменные. В журнале появятся разные авторы и один и тот же коммитер (root@host
), но это даст вам больше аудита. Конечно, это означает, что вы доверяете своим администраторам сохранять переменные нетронутыми. Поскольку каждый из них использует определенную оболочку, они могут sudo
для рутирования и источника файла с их конкретными git
переменные, идентифицирующие каждую по-разному в коммитах. Не очень практично, но вы можете даже автоматизировать это с помощью скриптов.
РЕДАКТИРОВАТЬ: Конечно, даже лучший подход, назначенный @ScottPack, - это использовать систему управления конфигурацией, такую как Puppet или Chef, и использовать git для отслеживания изменений на центральном сервере, а не на реальных серверах, чтобы каждый администратор мог иметь рабочую копию конфигурация.
С участием замазка вы можете установить это в «Соединение -> Данные -> Переменные среды».
Они также присутствуют после 'su
'получить root права.
Если вы настроили учетные записи пользователей на своих серверах с помощью ключей ssh, вы можете фактически присоединить переменные среды к авторизованным ключам во время установки - например, в ~ bob / .ssh / authorized_keys
environment="GIT_AUTHOR_NAME=Bob Smith",environment="GIT_AUTHOR_EMAIL=bob.smith@megacorp.com" ssh-rsa AAAA.... bob.smith@megacorp.com
Таким образом, когда пользователи SSH входят в систему, они автоматически настраивают эти envs - им не нужно пересылать их с локального клиента. Бонусные баллы, если у вас уже есть эта информация и вы генерируете конфигурации authorized_keys из системы управления конфигурациями.
Примечание: для вышеуказанного требуется PermitUserEnvironment yes
в sshd_config
Если вы используете sudo
и у вашего пользователя без полномочий root смонтирован домашний каталог:
git -c include.path=<file>
будет включать конфигурацию в <file>
.
Чтобы автоматически загружать файлы конфигурации моего пользователя без полномочий root, я использую bash
псевдоним:
alias gsudo='sudo git -c "include.path='"${XDG_CONFIG_DIR:-$HOME/.config}/git/config\" -c \"include.path=$HOME/.gitconfig\""
Тогда я использую gsudo
вместо того git
как для:
Убедитесь, что конфигурация действительно импортируется:
gsudo config --list --show-origin --includes | less
В дополнение к ответу coredump вы также можете установить эти параметры в .git/config
файл в вашей рабочей копии репозитория (вручную или с помощью git config
команда.
Видеть man git-config
для получения дополнительной информации о команде и интересных вещах, которые вы можете с ней делать.