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

我有一个开发的git服务器,部署到一个活的服务器,当分支被推送到。 每个用户都有自己的login,因此实时部署的post-receive hook是在自己的用户下运行的。

因为我不想把用户公钥作为远程活动服务器上的授权密钥来维护,所以我组成了一组'属于git系统的密钥,以便添加到远程活动服务器中(在post-receive hook我正在使用$GIT_SSH设置私钥-i选项)。

我的问题是,因为所有的用户可能想要部署到现场,git系统的私钥至less必须是可读的,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 

我环顾四周期待find一些迫使ssh只能通过连接的方式,但除了一些用户之外,我什么也没有发现,只是一味的说,你不应该允许访问任何东西。

这是一个很好的简单和安全的方法。

为ssh传输创build一个新用户,我将其称为git-sync。 在服务器上用git存储库的组成员身份创build一个类似的用户。 将sync-user的公钥添加到该用户的authorized_keys2文件中。 我假设git用户都是gitgroup的成员。 确保git-sync用户也是这个组的成员。

现在编辑你的/ etc / sudoers文件来包含一行:

 %gitgroup ALL=(git-sync) NOPASSWD: /usr/bin/git 

这将允许gitgroup组的任何成员运行命令/ usr / bin / bit作为git-sync没有密码。

现在把这样的东西放在你的post-receive钩子里:

 sudo -u git-sync /usr/bin/git push origin 

您可以使用组可读身份文件,除非您是密钥的所有者。 所以,只要将身份文件设置为由root用户拥有,然后您的所有git存储库用户都将被设置为去。

这样做的好处是你不需要sudo – 解决scheme将会更简单。

请注意,如果您使用root来推送到您的git仓库,这将再次遇到原来的问题。

 Permissions 0640 for 'id_rsa' are too open. 

私钥必须保持私密。 你不应该让任何人阅读它。

因为我不想把用户公钥作为远程活动服务器上的授权密钥来维护,所以我组成了一组'属于git系统的密钥,以便添加到远程活动服务器中(在post-receive hook我正在使用$GIT_SSH设置私钥与-i选项)。

  1. 设置密钥对从开发人员ssh到生产服务器
  2. post-receive钩子脚本中,尝试如下所示:

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