我使用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
选项在安全策略中启用,许多 GNU/Linux 发行版通过在其配置文件sudo
中提供以下行来明确这一点:/etc/sudoers
这可确保命令在最小环境中运行,并且在受限环境中删除了大部分调用用户的环境变量。
可以将特定变量列入白名单,以便将它们保留在环境中。为了安全起见,我使用
visudo
命令来编辑sudoers
配置文件。此外,/etc/sudoers
我没有直接修改,而是将自定义修改添加到目录中的单独文件中/etc/sudoers.d/
。为此,我运行sudo visudo -f /etc/sudoers.d/custom
以使配置包含以下行:现在,运行
sudo ssh-add -l
显示我可以连接到身份验证代理,并且可以继续更新远程存储库: