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

2024-01-28

使用卡皮斯特拉诺v3,我怎样才能跑all远程任务通过su作为另一个用户?我在官方文档中找不到任何内容(http://capistranorb.com/ http://capistranorb.com/)

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


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

有两种主要情况需要使用不同的用户:

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

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

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

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

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

简而言之,我认为从表面上看,您所要求的内容并不容易用 Capistrano 完成。如果您有特定的用例,我们也许能够提供建议,告诉您如何以不同的方式处理问题,从而更好地发挥 Capistrano 的优势。

祝你好运!

Update

进一步看,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 https://github.com/capistrano/rbenv/blob/master/lib/capistrano/tasks/rbenv.rake#L17

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以另一个用户身份运行任务 的相关文章

  • cap部署symfony2项目时出现问题,找不到app/bootstrap.php.cache

    我正在尝试 第一次 使用 capifony 从我的 github 存储库部署我的网站 它一直运行到设置阶段并出现以下错误 out example me PHP Warning require once var www example pro
  • Capistrano 3:仅在分配了角色的服务器池中的单个服务器上运行任务

    我有 20 台充当 Web 角色的服务器 我有一项任务只需要对其中一个执行 因为更改会影响共享存储 我当前的解决方案是解决这个问题的黑客 如下 寻找更好的方法 我没有大量的 ruby 或 cap 经验 task checkout proje
  • 尝试使用 Capistrano 3 和 rbenv 安装 Rails 应用程序

    我有一个安装了 Ruby 2 1 1 的 VPS 设置 并且本地安装了相同的版本 我运行 14 04 Ubuntu 的开发机器报告 ruby v ruby 2 1 1p76 2014 02 24 revision 45161 x86 64
  • Cap 部署 - 错误:未找到存储库

    我继承了一个项目 并且对开发方面感到满意 但系统操作员很差劲 而且 Capistrano 部署失败了 对于之前的开发人员已经部署过的项目 cap deploy check 运行良好 导致 You appear to have all nec
  • capistrano 错误:...../当前:没有这样的文件或目录

    我正在尝试使用 capistrano 进行部署 但是当我执行 cap deploy update 时 它 没有创建 current 文件夹 这是错误 有什么想法吗 executing cd home adamtodd apps homeba
  • Capistrano 和环境变量

    我已经改用配置的环境变量 http 12factor net config它工作得很好 除非我必须使用 capistrano 部署或运行 任务 Capistrano 3 似乎执行每个带有前缀的命令 usr bin env这会删除我设置的所有
  • 使用 Capistrano 的 Git 工作流程

    我正在尝试使用 capistrano 来了解一个良好的 git 工作流程 我找到了一个few http nakedstartup com 2010 04 simple daily git workflow good http reinh c
  • Capistrano 和 Bash:忽略命令退出状态

    我正在使用 Capistrano 运行远程任务 我的任务如下所示 task my task do run my command end 我的问题是如果my command退出状态 0 则 Capistrano 认为它失败并退出 当退出状态不
  • 从临时服务器连接到 GitoLite 时出错 - ECONNREFUSED 部署错误

    我在尝试将以前工作的项目部署到开发服务器时遇到了一些麻烦 我没有设置系统 但我确实拥有我需要的所有凭据 我认为 在尝试 cap staging 部署之后 我到目前为止 然后它产生了一个错误 请看下面 triggering load call
  • 开发流程、部署、GitHub

    我正在努力为我们的团队制定一个开发流程 任何时候 我们都有 3 4 分散的开发人员在我们的代码库上工作 我们已经开始使用 GIT 我们的想法是 工作不仅仅是实时修复 然后他们分叉了 master 分支 每个人在服务器上都有自己的开发环境 并
  • Rails 3.1 上的 Capistrano 部署/资产失败

    我添加了这一行load deploy assets 到我的 Capfile 以使用 Rails 3 1 部署资产 卡皮斯特拉诺到达这条线 executing cd home deploy armonia stage releases 201
  • capistrano 顺序重启

    我将 capistrano 配置为跨三台物理服务器进行部署 我想将重新启动任务配置为按顺序转到每个服务器并重新启动应用程序 而不是立即转到所有服务器的默认方式 这是当前的部署任务 namespace deploy do task start
  • 如何让 nginx 和乘客在部署后自动重启

    我目前在虚拟专用服务器上部署了一个 Rails 应用程序 我使用 Capistrano Nginx 和乘客在服务器上运行我的 Rails 应用程序 由于某种原因 在完成 cap 部署 更新后 我永远无法在网站上显示更新的代码 部署进行得很好
  • main:Object 的未定义方法“run”

    部署时我得到以下输出 cap aborted NoMethodError undefined method run for main Object config deploy rb 37 in block 2 levels in
  • 为什么在生产中得到空 CSS 文件?

    我在文件中放入了很多css文件active admin css scss Active Admin s got SASS import active admin mixins import active admin base import
  • Rails 6 + Capistrano - 没有这样的 puma.sock 文件

    拜托 我有一个大问题10多个小时了 每当我使用 Capistrano 和 Puma 在 Rails 中运行应用程序部署并重新启动 nginx 时 当我尝试访问我的 Web 时 我会看到此错误 在此输入图像描述 https i stack i
  • Capistrano 无法部署到远程服务器

    SOLUTION 解决方案是将以下内容添加到 production rb 的顶部 unshift File expand path lib ENV rvm path Add RVM s lib directory to the load p
  • 为什么 Capistrano 部署在资产:预编译时失败而没有错误?

    我已经尝试了我能想到的一切 但我无法让部署工作 该应用程序需要部署到由Alwaysdata托管并运行ruby 2 6 2的VPS 使用Capistrano进行部署 这是一个 Rails 6 0 2 2 应用程序 使用 webpack 处理
  • capistrano deploy.rb 中的 require 找不到文件

    我有一个 Rails 3 0 5 应用程序 我正在设置 capistrano 来使用配方 在我的配置目录中 我有一个名为 database capistrano rb 的文件 在我的deploy rb中 也在配置目录中 我有以下行 就在开头
  • Capistrano 和 XSendFile 配置

    我正在尝试使用 Apache 2 2 Passenger 4 0 59 和 XSendFile 0 12 配置 Rails 生产服务器 应用程序通过 Capistrano 部署 部署的应用程序生成 可能很大 PDF Rails root t

随机推荐

  • 如果 Session 不是 Active Record 模型,如何处理 :session 错误?

    没有会话模型 除了显示一般失败通知之外 如何创建有关表单提交失败原因的特定错误 回想一下第 7 3 3 节 我们使用用户模型错误消息显示注册错误 这些错误与特定的 Active Record 对象相关 但此策略在这里不起作用 因为会话不是
  • 调整标签大小以适应文本数量 - Swift

    嘿 我有一个标签 我需要根据文本量使该标签的宽度更小或更大 我只找到了如何调整文本以适合大小 但找到了如何调整大小以适合文本 有任何想法吗 你会想要这样做 myLabel sizeToFit 正如这里所见 https developer a
  • FontMetrics 设置字体?

    我正在制作一个程序 需要在 FontMetrics 对象内设置 Font 我之前已经创建了 fontmetrics 但现在我无法再访问 Graphics 对象 然而 我想更改 FontMetrics 内的字体 即创建一个新的 FontMet
  • 检测移动设备和平板电脑设备

    我目前正在研究一些用于 PHP 检测手机的代码 这可能非常简单 现在我遇到了一个问题 我希望能够在我的 MVC 框架中为平板电脑 手机和网页制作独特的视图文件 所以我需要将平板电脑与其他移动设备分开 目前这是我正在使用的代码 public
  • 内存分配 char* 和 char[]

    这两者在内存分配方面有什么区别 char p1 hello char p2 hello 第一个创建了一个pointer变量 四个或八个字节的存储空间 具体取决于平台 并存储location那里有一个字符串文字 第二个创建一个array六个字
  • jQuery 里面的点击事件为

    我真的不知道我发生了什么事 代码如下 for var j 0 j
  • Android - 努力设计帐户选择器的样式

    我正在尝试在我的游戏中实现 AccountPicker 并且我尝试使用所有三个版本newChooseAccountIntent 2 来自AccountManager和一个来自AccountPicker 我的代码看起来像这样 if andro
  • PHP 中为什么有句点? [复制]

    这个问题在这里已经有答案了 可能的重复 如果在 php 字符串中间使用 句点 字符 是什么意思 https stackoverflow com questions 6104449 what does the period character
  • 将两个 byteBuffer 连接成一个

    您好 我有 2 个 byteBuffer 我想将它们连接在一起形成一个 byteBuffer 我在这里发现了类似的问题 但那里的建议都不适合我 你可以这样做 ByteBuffer b3 ByteBuffer allocate b1 limi
  • 什么时候删除 git 功能分支合适?

    我不想结束82 个特色分支悬挂在周围 https stackoverflow com questions 2353804 list git branches that can safely be deleted 所以我想知道将功能分支合并到
  • 如何用C/C++打开Chrome扩展程序中包含的文件?

    我正在尝试在 Chrome 扩展程序中打开一个要解析的文件 例如 config txt 通过 Javascript 这将相当容易 例如 chrome extension getURL config txt 会得到类似的东西chrome ex
  • 对 Intellij 产品中的控制台输出进行着色

    我有一个带有默认输出的自定义脚本 我想对错误 警告和信息进行着色 在 Intellij 产品 IDEA PhpStorm PyCharm 中有办法做到这一点吗 已经有一段时间了 但如果您仍然感兴趣 有一个用于控制台着色的新插件 与 Inte
  • 如何避免 IntelliTrace 事件中的 EF 查询被截断?

    我正在尝试调试实体框架查询 但是 当查询变得太大时 intelliTrace 中显示的查询会被截断 即使我将其复制并粘贴到记事本中 也仅显示查询的一部分 是否有任何解决方法可以获取 EF 生成的整个查询 提前致谢 已经有一段时间了 但它可能
  • 滚动时列表视图图像发生变化

    I am 解析 json数据在一个列表视图 图像视图和文本视图 首先四项列表视图的图像和文本视图正确添加但是当我滚动列表视图时 图像视图中的图像正在发生变化 这是我的代码 适配器 java public class Adapter exte
  • 角度插值无法正常工作?

    我有一个带有插值的样本 当使用任何一个事件时 它会正确显示下拉值 如下所示 sample click me https stackblitz com edit angular 234dlf file src 2Fapp 2Fapp comp
  • MSBuild (TFS) 中的 Nhibernate.Bytecode.Castle 问题

    我们有一个 Fluent NHibernate 映射测试正在本地计算机上通过 但是当我们签入 TFS 时 测试在构建服务器上失败 我们正在使用 MSTest 我们得到的错误是 NHibernate Bytecode UnableToLoad
  • 如何在不修改代码的情况下禁用在 pytest 中跳过测试?

    我继承了一些实现的代码pytest mark skipif进行一些测试 阅读 pytest 文档 我知道我可以添加条件 可能检查环境变量 或者使用更高级的功能pytest mark将测试组一起控制 不幸的是 到目前为止 文档中似乎没有任何内
  • 字幕与文字混合

    我尝试使用以下方法将字幕与纯文本分开two空格处 我的 Rmd 文档的第一部分如下所示 title Script de Limpieza errores de digitalizacion y division de base madre
  • 弱引用而不是 getActivity() (Android 避免内存泄漏)?

    为了避免内存泄漏 我编写了以下方法 该方法将在活动中使用 并且主要在片段中使用 使用继承 该方法应该允许我永远不会通过调用直接引用该活动 this or getActivity 方法是 private WeakReference
  • 以另一个用户身份运行任务

    使用卡皮斯特拉诺v3 我怎样才能跑all远程任务通过su作为另一个用户 我在官方文档中找不到任何内容 http capistranorb com http capistranorb com 对于我的用例 每个虚拟主机都有一个 SSH 用户和