web-dev-qa-db-ja.com

gitリポジトリで/ etc /を追跡し、ルートとしてコミットするときのユーザー名を修正

サーバー上の/etc/の変更を追跡するためにgitを使用します。

管理者は/ etc /内のファイルを変更するときにrootとして作業するため、コミットには作成者がいます

root <root@machinename>

実際に変更を行った管理者を確認できないため、これはあまり満足のいくものではありません。

Gitログで実際の管理者名を取得するにはどうすればよいですか?リポジトリのローカルクローンを保持することは、何かが機能するまで対話的に変更することが多く、変更-コミット-プッシュ-シーエラー-リピートサイクルはここでは役に立たないため、実現可能ではないと思います。

14
cweiske

Gitの作成者とコミッターの名前は、環境変数GIT_COMMITTER_NAMEGIT_COMMITTER_EMAILGIT_AUTHOR_NAMEGIT_AUTHOR_EMAILの影響を受けます。

ここでの秘訣は、SSH経由で接続するときに、これらの変数をリモートサーバーに送信することです。

  1. ~/.bashrcファイルで変数を定義してエクスポートします。

    export GIT_AUTHOR_NAME="Christian Weiske"
    
  2. ~/.ssh/configを調整して、SSH接続で自動的に送信します:

    SendEnv LANG LC_* GIT_*
    

    LANGLC_*は必須ではありませんが、Debianはデフォルトのssh_configにあるので、私もそれらを送信する必要があると思いました

  3. リモートサーバーで、/etc/ssh/sshd_config環境変数を受け入れるようにGIT_*sshd構成を調整します。

    AcceptEnv LANG LC_* GIT_*
    

Voila-git commitのrootとしての/etc/は、以下につながります。

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

Serverfaultが将来的にフォールトする場合: http://cweiske.de/tagebuch/carry-git-settings.htm

13
cweiske

最初に、あなたの質問とは関係なく、私はあなたに至急root loginsとsuの使用を停止し、ユーザーログインとSudoの使用を停止することをお勧めします代わりに。 rootログインをコンソールのみに制限するか、それを制限します。

とはいえ、git commitには--authorオプションがあります。

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

ユーザーごとの環境変数を慎重に使用して、GIT_AUTHOR_NAMEおよびGIT_AUTHOR_EMAIL変数を設定することもできます。ログには、異なる作成者と同じコミッター(root@Host)が表示されますが、より多くの監査が提供されます。もちろん、これは変数をそのまま維持することを管理者に信頼することを意味します。それぞれが特定のシェルを使用しているため、ルートでSudoを実行し、特定のgit変数を使用してファイルを調達し、コミットでそれぞれを個別に識別できます。あまり実用的ではありませんが、スクリプトを使用して自動化することもできます。

編集:もちろん、@ ScottPackによって指名されたさらに優れたアプローチは、PuppetやChefなどの構成管理システムを使用し、gitを使用して、実サーバーではなく中央サーバーの変更を追跡することです。各管理者は、構成の作業用コピーを持つことができます。

5
coredump

Sshキーを使用してサーバーにユーザーアカウントをプロビジョニングした場合、実際に環境変数を設定時に認証済みキーにアタッチできます(例:〜bob/.ssh/authorized_keys)。

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

このように、ユーザーがSSHを使用すると、自動的にこれらの環境設定が行われます。ローカルクライアントから転送する必要はありません。すでにこの情報があり、構成管理システムからauthorized_keys構成を生成している場合のボーナスポイント。

注:上記にはPermitUserEnvironment yes sshd_config

3
minaguib

PuTTY を使用すると、「接続->データ->環境変数」でこれを設定できます。

また、「su」の後にルートに存在します。

3
Cybot

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を両方に使用します。

  • ルートとして実行
  • 非rootユーザーのすべてのgit構成にアクセスできる

構成が実際にインポートされていることを確認します。

gsudo config --list --show-Origin --includes | less
1
Tom Hale

コアダンプの回答に加えて、リポジトリの作業用コピーの.git/configファイルでこれらのオプションを設定することもできます(手動で、またはgit configコマンドを使用して)。

コマンドの詳細と、コマンドで実行できるクールなことについては、man git-configを参照してください。

0
voretaq7