Corrija nomes de usuários ao rastrear / etc / no repositório git e confirme como root

10

Usamos o git para rastrear alterações em /etc/ em nossos servidores.

Os administradores trabalham como root ao alterar arquivos em / etc / e, portanto, seus commits têm autor

root <root@machinename>

Isso não é muito satisfatório, já que você não pode ver qual administrador realmente fez a alteração.

O que podemos fazer para obter os nomes reais do administrador no log do git? Eu não acho que manter um clone local do repositório é viável, já que muitas vezes mudamos interativamente até que algo funcione, e um ciclo change-commit-push-seeError-repeat não ajudaria aqui.

    
por cweiske 07.04.2011 / 11:13

5 respostas

11

O autor do git e o nome do committer podem ser influenciados pelas variáveis de ambiente GIT_COMMITTER_NAME , GIT_COMMITTER_EMAIL , GIT_AUTHOR_NAME e GIT_AUTHOR_EMAIL .

Agora, o truque é enviar essas variáveis para o servidor remoto ao conectar-se por meio do SSH:

  1. Defina e exporte as variáveis no seu arquivo ~/.bashrc :

    export GIT_AUTHOR_NAME="Christian Weiske"
    
  2. Envie-os automaticamente com uma conexão SSH ajustando ~/.ssh/config :

    SendEnv LANG LC_* GIT_*
    

    LANG e LC_* não são necessários, mas o Debian tem em seu ssh_config padrão, então eu pensei que deveria enviá-los também

  3. No servidor remoto, ajuste a configuração do sshd em /etc/ssh/sshd_config para aceitar GIT_* de variáveis de ambiente:

    AcceptEnv LANG LC_* GIT_*
    

Voila - uma git commit como raiz em /etc/ leva a:

commit 8a4654f13241f05361283a88ce041a0fc24b8ac6
Author: Christian Weiske <[email protected]>

No caso de falhas no servidor, alguma hora no futuro: link

    
por 25.11.2011 / 11:53
3

Primeiro, e não relacionado à sua pergunta, peço que você urgentemente pare de usar root logins e su e use logins de usuário e sudo . Restringir seus root logins ao console apenas, ou nem mesmo isso.

Dito isto, git commit tem uma opção --author que pode ajudá-lo:

# git commit --author='Author Name <[email protected]>' -a

Você também pode usar cuidadosamente as variáveis de ambiente por usuário para definir as variáveis GIT_AUTHOR_NAME e GIT_AUTHOR_EMAIL . No log, aparecerão diferentes autores e o mesmo commiter ( root@host ), mas lhe dará mais auditoria. Claro que isso significa que você confia em seus administradores para manter as variáveis intactas. Como cada um está usando um shell específico, eles podem usar sudo para raiz e origem de um arquivo com suas variáveis git específicas, identificando cada um de forma diferente nos commits. Não é muito prático, mas você pode até automatizar isso com scripts.

EDIT: É claro que uma abordagem ainda melhor, conforme indicado pelo @ScottPack, seria usar um sistema de gerenciamento de configuração como Puppet ou Chef e usar o git para rastrear as mudanças no servidor central e não no servidor. servidores reais para que cada administrador possa ter uma cópia de trabalho da configuração.

    
por 07.04.2011 / 13:13
3

Com massa , você pode definir isso em "Conexão - > Dados - > Ambiente Variáveis ".

Eles também estão presentes depois de ' su ' na raiz.

    
por 30.11.2011 / 08:32
1

Se você provisionar contas de usuários em seus servidores usando chaves ssh, você pode realmente anexar variáveis de ambiente às chaves autorizadas no momento da instalação - por exemplo, em ~ bob / .ssh / authorized_keys

environment="GIT_AUTHOR_NAME=Bob Smith",environment="[email protected]" ssh-rsa AAAA.... [email protected]

Dessa forma, quando os usuários SSH têm essa configuração de envs automaticamente, não é necessário enviá-los do cliente local. Pontos de bônus se você já tiver essa informação e estiver gerando configurações de authorized_keys a partir de um sistema de gerenciamento de configuração.

Nota: O acima requer PermitUserEnvironment yes em sshd_config

    
por 08.09.2016 / 04:44
0

Além da resposta do coredump, você também pode definir essas opções no arquivo .git/config em sua cópia de trabalho do repositório (manualmente ou usando o comando git config .

Veja man git-config para mais informações sobre o comando e as coisas legais que você pode fazer com ele.

    
por 07.04.2011 / 15:54

Tags