Jes*_*oss 10 linux ssh deployment git private-key
我有一个开发 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
Run Code Online (Sandbox Code Playgroud)
我环顾四周,希望能找到强制 ssh 通过连接的方法,但我什么也没找到,但人们盲目地说除了单个用户外,您不应该允许访问任何内容。
小智 13
您CAN使用组可读身份文件,除非你是密钥的所有者。因此,只需将身份文件设置为由 root 用户拥有,然后将所有 git 存储库用户设置为 go。
这样做的一个好处是您不需要 sudo - 解决方案会更简单。
请注意,如果您使用 root 推送到您的 git 存储库,这将再次遇到原始问题。
小智 7
这是一个很好的简单而安全的方法。
为 ssh 传输创建一个新用户,我将其称为 git-sync。在服务器上创建一个具有 git 存储库组成员身份的类似用户。将 sync-user 的公钥添加到该用户的 authorized_keys2 文件中。我假设 git 用户都是 gitgroup 的成员。确保 git-sync 用户也是该组的成员。
现在编辑您的 /etc/sudoers 文件以包含如下一行:
%gitgroup ALL=(git-sync) NOPASSWD: /usr/bin/git
Run Code Online (Sandbox Code Playgroud)
这将允许 gitgroup 组的任何成员在没有密码的情况下将命令 /usr/bin/bit 作为 git-sync 运行。
现在把这样的东西放在你的 post-receive hook 中:
sudo -u git-sync /usr/bin/git push origin
Run Code Online (Sandbox Code Playgroud)