我使用etckeeper将各种操作系统配置保持在版本控制之下。到目前为止,我很满意只使用本地Git存储库来跟踪更改,但是我发现我没有充分利用此功能,因此我决定配置远程存储库以保留副本会很有用这些存储库中的任何一个,以便/etc
可以从其他计算机上获得配置。
在远程服务器上,我创建了一个裸仓库(确保只有git
用户可以访问其内容):
sudo -u git -H git init --bare ~git/repos/anthony-etc.git
chmod -R 700 ~git/repos/anthony-etc.git/
在远程服务器上的SSH服务被配置为允许用户(包括git
用户)只能使用密钥进行验证-和我已经上传了我的个人公钥到.authorized_keys
了的git
服务器上的用户。
在本地计算机上,我将其添加为远程存储库:
sudo git remote add origin [email protected]:/home/git/repos/anthony-etc.git/
由于只有超级用户才能修改/etc
目录(包括其.git
子目录)中的文件,因此所有Git命令都使用来运行sudo
。
在尝试使用SSH进行推送之前,我检查了是否可以使用当前的SSH身份验证代理:
$ sudo ssh-add -l
Could not open a connection to your authentication agent.
使用时,此操作失败sudo
,我想知道如何配置sudo
为与已经以非超级用户身份使用的SSH身份验证代理一起使用。
它不起作用的原因SSH_AUTH_SOCK
是,当通过运行命令时,用于存储SSH代理的Unix域套接字文件名的变量不在环境中sudo
。
默认情况下,该env_reset
选项在sudo
安全策略中处于启用状态,并且许多GNU / Linux发行版通过在/etc/sudoers
配置文件中附带以下行来使其明确:
Defaults env_reset
这样可以确保命令在最小的环境中运行,并且在受限制的环境中删除了大多数调用用户的环境变量。
可以将特定变量列入白名单,以便将其保留在环境中。为了安全起见,我使用visudo
命令来编辑sudoers
配置文件。另外,/etc/sudoers
我没有直接修改,而是将自定义修改添加到/etc/sudoers.d/
目录中的单独文件。为此,我运行sudo visudo -f /etc/sudoers.d/custom
以使配置包含以下行:
Defaults env_keep += "SSH_AUTH_SOCK"
现在,运行sudo ssh-add -l
显示我可以连接到身份验证代理,并且可以继续更新远程存储库:
sudo git push --set-upstream origin master
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句