サーバー上の/etc/
の変更を追跡するためにgitを使用します。
管理者は/ etc /内のファイルを変更するときにrootとして作業するため、コミットには作成者がいます
root <root@machinename>
実際に変更を行った管理者を確認できないため、これはあまり満足のいくものではありません。
Gitログで実際の管理者名を取得するにはどうすればよいですか?リポジトリのローカルクローンを保持することは、何かが機能するまで対話的に変更することが多く、変更-コミット-プッシュ-シーエラー-リピートサイクルはここでは役に立たないため、実現可能ではないと思います。
Gitの作成者とコミッターの名前は、環境変数GIT_COMMITTER_NAME
、GIT_COMMITTER_EMAIL
、GIT_AUTHOR_NAME
、GIT_AUTHOR_EMAIL
の影響を受けます。
ここでの秘訣は、SSH経由で接続するときに、これらの変数をリモートサーバーに送信することです。
~/.bashrc
ファイルで変数を定義してエクスポートします。
export GIT_AUTHOR_NAME="Christian Weiske"
~/.ssh/config
を調整して、SSH接続で自動的に送信します:
SendEnv LANG LC_* GIT_*
LANG
とLC_*
は必須ではありませんが、Debianはデフォルトのssh_configにあるので、私もそれらを送信する必要があると思いました
リモートサーバーで、/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
最初に、あなたの質問とは関係なく、私はあなたに至急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を使用して、実サーバーではなく中央サーバーの変更を追跡することです。各管理者は、構成の作業用コピーを持つことができます。
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
PuTTY を使用すると、「接続->データ->環境変数」でこれを設定できます。
また、「su
」の後にルートに存在します。
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
コアダンプの回答に加えて、リポジトリの作業用コピーの.git/config
ファイルでこれらのオプションを設定することもできます(手動で、またはgit config
コマンドを使用して)。
コマンドの詳細と、コマンドで実行できるクールなことについては、man git-config
を参照してください。