【问题标题】:Run tasks as another user以其他用户身份运行任务
【发布时间】:2015-12-16 08:55:12
【问题描述】:

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

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

【问题讨论】:

    标签: capistrano capistrano3


    【解决方案1】:

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

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

    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

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

    【讨论】:

    • 感谢您详尽的回答。我添加了一些用例细节。我希望 SSHKit 中有一个默认选项可以设置来完成此操作。
    • 在 SSHKit 问题跟踪器中有一个类似的问题:github.com/capistrano/sshkit/issues/262
    【解决方案2】:

    为了以另一个用户身份通过​​ su 运行所有远程任务,我认为您需要更改该用户的所有权

    我假设部署文件夹名称是 /public_html/test 。

    sudo chown User:User /public_html/test # `chown` will change the owner ship so that `User` user can `**Read/Write**` 
    umask 0002
    sudo chown User:User public_html/test/releases
    sudo chown User:User public_html/test/shared
    

    希望这能解决您的问题!!!

    【讨论】:

    • 我不想更改目录所有权,这不能解决我的问题,抱歉。
    • 如果您不想更改目录所有权 ..您可以授予该用户 root 访问权限 ..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-06
    • 2010-11-13
    • 2015-03-14
    • 1970-01-01
    • 2019-11-09
    • 2012-02-05
    相关资源
    最近更新 更多