SSH不允许使用具有组可读权限的密钥


9

我有一个开发git服务器,当live分支被推送到时,它会部署到实时服务器。每个用户都有自己的登录名,因此,post-receive进行实时部署的挂钩是在其自己的用户下运行的。

因为我不想在远程实时服务器上维护用户的公共密钥作为授权密钥,所以我组成了一组“属于git系统的密钥”以添加到远程实时服务器上(在post-receive钩子中,我正在使用$GIT_SSH以使用-i选项设置私钥)。


我的问题是,由于所有用户都可能想部署到现场,因此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进行连接,但是我什么也没发现,只有人们盲目地说您只允许访问一个用户而已。

Answers:


5

这是一种很好的简单而安全的方法。

为ssh传输创建一个新用户,我将其称为git-sync。在服务器上为git存储库创建具有组成员身份的类似用户。将同步用户的公共密钥添加到该用户的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

这比我想要的要好,谢谢!
杰西·罗斯

11

CAN使用组可读身份文件,除非你是密钥的所有者。因此,只需将身份文件设置为例如由root用户拥有,然后将所有git存储库用户设置为go。

这样做的一个好处是您不需要sudo-解决方案将更加简单。

请注意,如果您使用root推送到git repo,这将再次遇到原始问题。


2
这太棒了,比“不要那样做”的答案要好得多。谢谢!
伊恩·麦克高恩

2
Permissions 0640 for 'id_rsa' are too open.

私钥必须保持私密。您不应该允许任何人阅读它。

因为我不想在远程实时服务器上维护用户的公共密钥作为授权密钥,所以我组成了一组“属于git系统的密钥”以添加到远程实时服务器上(在 post-receive钩子中,我正在使用$GIT_SSH以使用-i选项设置私钥)。

  1. 设置密钥对以从开发人员SSH到生产服务器
  2. post-receive挂钩脚本中,尝试如下操作:

    if [ "live" == "$branch" ]; then
        ssh -t user@prod "git --work-tree=... --git-dir=... checkout -f"
    fi
    

我该如何“设置从开发人员到生产服务器的SSH密钥对”,这就是我遇到的问题。我已经有2个了。
杰西·罗斯

1
关于开发人员:ssh-keygenssh-copy-id user@prod。在产品上:chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
量子

1
问题是有很多用户,因此我必须为每个要通过服务器上存在的每个项目编辑时间的用户重复该操作。
杰西·罗斯

不需要。您只需要设置两个用户即可:一个从ssh从开发人员切换到产品,另一个用于运行git checkout...(在产品上)。
量子

post-receive钩(开发机)是由正在推动改变(因此,根据用户权限)的用户运行,因此它们都将有不同的钥匙,我不能帮助这将是哪个用户。post-receive运行中的两个不同服务器上有两个钩子。
杰西·罗斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.