gpt4 book ai didi

capistrano - 以另一个用户身份运行任务

转载 作者:行者123 更新时间:2023-12-05 08:12:06 25 4
gpt4 key购买 nike

使用 Capistrano v3,如何以另一个用户身份通过​​ su 运行所有 远程任务?我在官方文档中找不到任何内容 ( http://capistranorb.com/ )

对于我的用例,每个虚拟主机都有一个 SSH 用户和一个用户。用户 A 连接到服务器并应以用户 B 的身份运行所有命令。

最佳答案

这不是一个很好的答案,但我认为如果不修改代码,您尝试做的事情是不可能的。原因如下:

在两种主要情况下,您需要使用不同的用户:

  1. 由于文件所有权,部署需要以特定用户身份运行。
  2. 部署需要以 root 权限运行。

在第一种情况下,您通常会简单地告诉 Capistrano 以该用户身份进行 ssh。

在第二种情况下,您会告诉 Capistrano 使用无密码 sudo (http://capistranorb.com/documentation/getting-started/authentication-and-authorisation/#authorisation) 运行某些命令。

我可以看到这样一种情况,即只有一个用户可以通过 SSH 访问,但文件所有权和权限是基于另一个用户的,所以你想让 su 成为工作流程的一部分。我确信这是可能的,但如果我必须这样做,我会阅读 Capistrano 的源代码并覆盖 shell 命令的执行方式。这将是非常重要的。

如果你有一个像 rm 这样的特定命令需要以不同的用户身份运行,你可以使用 SSHKit.config.command_map[:rm] = 'sudo rm ' 机制来做到这一点。

简而言之,从表面上看,我认为使用 Capistrano 无法轻松完成您的要求。如果您有特定的用例,我们可能会就您如何以不同的方式处理问题提供建议,从而更好地发挥 Capistrano 的优势。

祝你好运!

更新

进一步看,capistrano-rbenv gem 有一种机制可以覆盖所有命令的执行:

task :map_bins do
SSHKit.config.default_env.merge!({ rbenv_root: fetch(:rbenv_path), rbenv_version: fetch(:rbenv_ruby) })
rbenv_prefix = fetch(:rbenv_prefix, proc { "#{fetch(:rbenv_path)}/bin/rbenv exec" })
SSHKit.config.command_map[:rbenv] = "#{fetch(:rbenv_path)}/bin/rbenv"

fetch(:rbenv_map_bins).each do |command|
SSHKit.config.command_map.prefix[command.to_sym].unshift(rbenv_prefix)
end
end

https://github.com/capistrano/rbenv/blob/master/lib/capistrano/tasks/rbenv.rake#L17

您可能会在类似的事情上取得成功。

关于capistrano - 以另一个用户身份运行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34307582/

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