我有一个开发git服务器,在推送实时分支时部署到实时服务器.
每个用户都有自己的登录,因此实时部署的post-receive hook在他们自己的用户下运行.
每个用户都有自己的登录,因此实时部署的post-receive hook在他们自己的用户下运行.
因为我不想将用户公钥维护为远程实时服务器上的授权密钥,所以我已经编写了一组密钥,这些密钥属于git系统以添加到远程实时服务器(在post-receive hook中)我使用$GIT_SSH来设置带有-i选项的私钥).
我的问题是,由于所有用户可能希望部署为live,因此git系统的私钥必须至少是组可读的,而SSH实际上并不喜欢这样.
以下是错误示例:
XXXX@XXXX /srv/git/identity % ssh -i id_rsa XXXXX@XXXXX @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0640 for 'id_rsa' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. bad permissions: ignore key: id_rsa
我环顾四周期待找到一些强制ssh的方式来解决这个问题,但我找不到任何东西,只是人们盲目地说你不应该只允许访问除了单个用户之外的任何东西.
解决方法
这是一个简单而安全的好方法.
为ssh传输创建一个新用户,我称之为git-sync.在服务器上创建具有git存储库的组成员身份的类似用户.将sync-user的公钥添加到该用户authorized_keys2文件中.我假设git用户都是gitgroup的成员.确保git-sync用户也是该组的成员.
现在编辑/ etc / sudoers文件以包含如下行:
%gitgroup ALL=(git-sync) NOPASSWD: /usr/bin/git
这将允许gitgroup组的任何成员在没有密码的情况下以git-sync运行命令/usr/bin/bit.
现在把这样的东西放在你的post-receive钩子里:
sudo -u git-sync /usr/bin/git push origin