gpt4 book ai didi

git - 如何避免为在 www-data 下执行的 git pull 输入密码

转载 作者:行者123 更新时间:2023-12-02 14:23:52 25 4
gpt4 key购买 nike

当我需要执行从 PHP 脚本运行的 Git pull 命令时,我坚持了该操作。 (用户被添加到 www-data 组中)无需输入密码。我发现这可以使用命令解决:

eval "$(ssh-agent)"

ssh-add

但是这个命令只在我自己的用户下工作(例如乔治)。但是,如果我尝试在 git cloned 存储库中的 www-data 下执行以下命令:
sudo -u george git pull

我总是收到以下消息
Enter passphrase for key '/home/george/.ssh/id_rsa': 

注意:我将用户添加到 www-data 组和 visudo 用户。但我不知道,如何解决密码传递或避免输入密码。

非常感谢您的帮助。

最佳答案

有几种方法可以实现您想要的:

  • 在我看来,最“正确”的方式是:
  • 为您的 www-data 生成一个特殊的 SSH key 用户,并确保此 key 未使用密码加密 - 因为 SSH 客户端要求使用此密码来解密然后用于身份验证的 key 。
  • 远程部署该 key (很大程度上取决于您的设置),以便它可以用于读取访问。
  • 接下来,您必须使 www-data 可以读取此 key 。用户,并且只有那个用户 (!),即 key 文件必须由 www-data 拥有并且有 0600 ( -rw------- ) 权限位设置在它上面。

    有几种方法可以实现这一点:
  • 由于 SSH 客户端在 ~/.ssh 下查找 key 文件。目录(即用户主目录下的 .ssh 目录),您有几种选择:
  • 如果您的 www-data用户在文件系统上有真实的主目录(你可以通过运行 getent passwd www-data 知道),你可以创建 .ssh那里的目录并将 key 放入其中。
  • 在您的 pull 脚本中,覆盖 HOME运行 export 之前的环境变量(和 git 的新值) ,以便 SSH 客户端将主目录解析到其他位置。其余的应该如上所述设置。
  • SSH 客户端支持按用户配置,可以指定在哪里搜索 key ,甚至可以为不同的服务器指定不同的 key 。引用 ssh_config(5)手册页。
  • SSH 客户端通常支持在命令行上指定 key 文件的位置。 OpenSSH客户端二进制文件,通常用于常见的基于 Linux 和 BSD 的操作系统,支持 -i命令行选项(代表“身份”)。所以另一种方法是编写一个包装脚本,它只调用 ssh -i /path/to/the/key/file并将该脚本的路径放入(export ed)环境变量GIT_SSH以便 Git 调用您的脚本,而不仅仅是 ssh .
  • 使用 sudo是另一种选择(尽管我不喜欢它),但很可能使用修改后的凭据运行的新进程不会继承 session 中存在的某些环境变量,这些变量会告诉 SSH 客户端如何联系正在运行的 ssh-agent 实例它缓存了您的解密 key (是的,这个代理的存在就是为什么您只需要在交互式登录 session 中输入一次密码)。

    所以你可以阅读 ssh-agent作品以及如何制作sudo在使用修改后的凭据运行 Git 二进制文件时保留与之相关的环境变量。

    我不确定它是否能正常工作,因为访问 ssh-agent 的运行实例提供的 Unix 域套接字(或 fifo?——我现在不记得了)可能仍然存在权限问题。联系它,所以你需要做一些研究。
  • 使用像 sshpass 这样的程序将密码提供给 SSH 客户端。

    这可以直接完成,也可以通过包装 SSH 客户端本身来完成(见上文)。

    请注意,这种方法 臭气熏天因为这意味着密码将在某些脚本中以明文形式存储在某处。因此,您必须确保以与第一种情况下保护未加密 key 相同的方式保护此脚本。

  • 另一种选择是使用只读的未经身份验证的协议(protocol)( git://file:// 模式 — 以适用者为准)提供对存储库的访问。这个想法是,可以通过多种方式访问​​存储库,甚至可以使用不同的 URL(具有不同的模式——意味着协议(protocol))来获取和推送同一个命名的远程。

    关于git - 如何避免为在 www-data 下执行的 git pull 输入密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16734145/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com