Git deposunda / etc / öğesini izlerken kök olarak yürütürken kullanıcı adlarını düzeltin


13

/etc/Sunucularımızdaki değişiklikleri izlemek için git'i kullanıyoruz .

Yöneticiler / etc / içindeki dosyaları değiştirirken kök olarak çalışırlar ve bu nedenle taahhütlerinde yazar vardır.

root <root@machinename>

Hangi yöneticinin aslında değişikliği yaptığını göremediğiniz için bu çok tatmin edici değil.

Git günlüğündeki gerçek yönetici adlarını almak için ne yapabiliriz? Deponun yerel bir klonunu tutmanın mümkün olduğunu düşünmüyorum, çünkü bir şey işe başlayana kadar interaktif olarak sık sık değişiyoruz ve değişim-taahhüt-it-gör-Hata-tekrar döngüsü burada yardımcı olmaz.


Gerçek kök olarak mı yoksa kökten sudo'd mu?
Decado

Şu anda gerçek kök (ssh kökü @ veya "su", sudo yok)
cweiske

Kullanın etckeeper, versiyonlama / vb. Gibi garip gotchas ilgilenir. Ayrıca kullanıcı başına hesapları kullanmaya başlayın ve sudo.
Caleb

Yanıtlar:


12

Git yazar ve committer adı ortam değişkenleri ile etki altına alınabilir GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEve GIT_AUTHOR_EMAIL.

Şimdi işin püf noktası SSH üzerinden bağlanırken bu değişkenleri uzak sunucuya göndermektir:

  1. ~/.bashrcDosyanızdaki değişkenleri tanımlayın ve dışa aktarın:

    export GIT_AUTHOR_NAME="Christian Weiske"
    
  2. Ayarlayarak otomatik olarak bir SSH bağlantısıyla gönderin ~/.ssh/config:

    SendEnv LANG LC_* GIT_*
    

    LANGve LC_*gerekli değil, ama Debian sonra varsayılan ssh_config var, bu yüzden ben de onları göndermek gerektiğini düşündüm

  3. Uzak sunucuda, ortam değişkenlerini kabul etmek için sshd yapılandırmasını ayarlayın :/etc/ssh/sshd_configGIT_*

    AcceptEnv LANG LC_* GIT_*
    

Voila - a git commitas as in root /etc/:

commit 8a4654f13241f05361283a88ce041a0fc24b8ac6
Author: Christian Weiske <christian.weiske@netresearch.de>

Sunucu arızasının gelecekte bir süre arızalanması durumunda: http://cweiske.de/tagebuch/carry-git-settings.htm


5

İlk olarak ve sorunuzla ilgili olmayan, giriş bilgilerini kullanmayı ve kullanıcı girişlerini acilen durdurmanızı ve bunun yerine. Oturum açma bilgilerinizi yalnızca konsolla sınırlayın, hatta bu şekilde kısıtlamayın .rootsusudoroot

Bununla birlikte, orada size yardımcı olabilecek git commitbir --authorseçeneği var:

# git commit --author='Author Name <author@email.address.com>' -a

Ayrıca dikkatle sete kullanıcı başına ortam değişkenleri kullanabilirsiniz GIT_AUTHOR_NAMEve GIT_AUTHOR_EMAILdeğişkenler. Günlükte, farklı yazarlar ve aynı komiser ( root@host) görünecektir , ancak size daha fazla denetim verecektir. Tabii ki bu, değişkenlerin sağlam kalması için yöneticilerinize güvendiğiniz anlamına gelir. Her biri belirli bir kabuk kullandığından, sudobir dosyayı belirli gitdeğişkenleriyle köklendirip kaynaklayabilir ve her birini taahhütlerde farklı şekilde tanımlayabilirler. Çok pratik değil, ama bunu komut dosyalarıyla otomatikleştirebilirsiniz.

DÜZENLEME: Elbette @ScottPack tarafından atanan daha da iyi bir yaklaşım, Kukla veya Şef gibi bir yapılandırma yönetim sistemi kullanmak ve her yöneticinin çalışan bir kopyaya sahip olabilmesi için gerçek sunucularda değil, merkezi sunucudaki değişiklikleri izlemek için git'i kullanmak olacaktır. yapılandırma.


--authorTabii ki mümkün ama insanlar bunu yazmak için çok fazla olduğundan normal iş akışlarında kullanmıyorlar. Sudo kullanmak için ikinci fikrinizde: sudo'nun zararlı olduğunu düşünen ve ssh root erişimini sadece ssh tuşlarıyla kullanan insanlardan biriyim. Ve evet, yöneticilerimize güveniyoruz.
cweiske

5
@cweiske sudo'yu neden zararlı buluyorsunuz?
coredump

1
@cweiske Hayati bilgi için değiştiriciyi sorgulayan bir sarıcı komut dosyası düşündünüz mü (kim olduklarını, neyi değiştirdiklerini, neden değişiklik yapıldığını, varsa bilet numarasını)? Son istihdam yerim DNS değişiklikleri için benzer bir sisteme (CVS tabanlı) sahipti ve politikayı uygulamak için sarmalayıcılar vardı - şaşırtıcı derecede iyi çalışıyor.
voretaq7

4
@cweiske Değerlendirmenize bir parça katılıyorum. İle ederken, ssh anahtarı şifresini önbelleğe ve sersemce bir kök makinesine giriş, ya da sadece basit bir parola veya kök parolası daha makinenizde aynı şifreyi kullanmak için bir ssh ajan kullanabilir sudosen zorlamak bir şifre yazın için kullanıcı bile ( kullanıcı olarak oturum açmak için bir ssh anahtarı kullanıyorsa) ve kullanıcının neyi çalıştırabileceğini kontrol edebilirsiniz ve temel olarak kimin ne yaptığını denetleyen bir iziniz vardır. Ama herkes kendi görüşüne sahip.
coredump

2
Ayrıca sudobir kullanıcıyı her komut ( timestamp_timeout = 0) için bir parola girmeye zorlayacak şekilde yapılandırabilirsiniz . Belki geliştirme ve evreleme kutuları için uygun değil, kesinlikle üretim için uygundur. IMHO, SF konsensüsüne dayanarak, görüşlerinizi yeniden düşünmelisiniz sudo. SF ile ilgili en güzel şeylerden biri, gerçekten b * k :-) bilen bir akran topluluğuna sahip olmaktır.
Belmin Fernandez

3

İle macun siz "-> Veri -> Ortam Değişkenleri Connection" başlığı altında bu ayarlayabilirsiniz.

Ayrıca sukökten ' ' sonra da bulunurlar .


3

Sunucularınızdaki kullanıcı hesaplarını ssh anahtarlarını kullanarak sağlıyorsanız, kurulum zamanında ortam değişkenlerini yetkili anahtarlara ekleyebilirsiniz - örneğin, ~ bob / .ssh / yetkili_anahtarları

environment="GIT_AUTHOR_NAME=Bob Smith",environment="GIT_AUTHOR_EMAIL=bob.smith@megacorp.com" ssh-rsa AAAA.... bob.smith@megacorp.com

Bu şekilde SSH kullanıcıları otomatik olarak bu envs kurulumuna sahip olduklarında - onları yerel istemciden iletmelerine gerek yoktur. Bu bilgilere zaten sahipseniz ve bir yapılandırma yönetim sisteminden yetkili_anahtarlar yapılandırmaları oluşturuyorsanız bonus puanları.

Not: Yukarıda belirtilenler PermitUserEnvironment yessshd_config için gereklidir


1

Kullanıyorsanız sudove kök olmayan kullanıcınızın giriş dizini takılıysa:

git -c include.path=<file>içindeki yapılandırmayı içerecektir <file>.

"Root" dışı kullanıcının yapılandırma dosyalarını otomatik olarak çekmek için bashdiğer adı kullanıyorum:

alias gsudo='sudo git -c "include.path='"${XDG_CONFIG_DIR:-$HOME/.config}/git/config\" -c \"include.path=$HOME/.gitconfig\""

Sonra ikisinin gsudoyerine kullanın git:

  • Kök olarak çalıştır
  • Kök olmayan tüm kullanıcı git yapılandırmasına erişme

Yapılandırmanın gerçekten içe aktarıldığını kontrol edin:

gsudo config --list --show-origin --includes | less

0

Coredump'ın cevabına ek olarak, bu seçenekleri .git/configdeponun çalışma kopyasındaki dosyada da (elle veya git configkomutu kullanarak) ayarlayabilirsiniz .

man git-configKomut ve onunla yapabileceğiniz harika şeyler hakkında daha fazla bilgi için bkz .


Bu, yalnızca bir yönetici o makinede bu depoda işlem yapıyorsa çalışır, ancak birkaç yöneticide başarısız olur.
cweiske

Doğru - merkezi bir depoya sahip olduğunuz ve insanların bu repoyu klonladığı ve çektiği / ittiği bir durum için daha uygundur.
voretaq7
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.