我用等等管理员将我的各种操作系统配置置于版本控制之下。到目前为止,我满足于仅使用本地 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 身份验证代理一起工作。
答案1
它不起作用的原因是,SSH_AUTH_SOCK
通过 运行命令时,用于存储 SSH 代理的 Unix 域套接字文件名的变量不在环境中sudo
。
默认情况下,该env_reset
选项在安全策略中启用,许多 GNU/Linux 发行版通过在其配置文件sudo
中添加以下行来明确这一点:/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