ruby-on-rails - 以不同用户身份运行 capistrano 任务

标签 ruby-on-rails ruby capistrano

我是 capistrano 的新手,几天来我一直在努力解决这个问题,所以非常感谢您的帮助。

我们有一个烦人的安全设置,这意味着我无法以 ssh 用户身份在远程服务器上运行 capistrano 任务。这是 This problem 的更简单版本- 似乎没有有效的答案。

编辑: 进一步深入研究,我发现我可以做类似的事情:

run "su - newuser" do |channel, stream, data|

          channel.send_data("#{password}\n")

          channel.send_data("rm -rf #{release_path}\n")

        end }

我可以使用它来覆盖默认的部署方法,并完成大部分我需要做的事情。我可以在服务器上创建所需的目录等,并使用 ssh 转发作为 ssh 用户从 git 中拉取。这造成了我的下一个问题。我现在拥有 newuser 拥有的目录,其中包含 ssh_user 拥有的文件和目录。我确实拥有 newuser 的 sudo 权限,但无法弄清楚如何 chmod 文件。我尝试过类似的东西:

run "su - newuser" do |channel, stream, data

              channel.send_data("#{password}\n")

              channel.send_data("sudo chmod 775 #{cache_path}\n")

            end }

但是一切都挂起,并且似乎该 block 是在无限循环中执行的。显然,这里有很多我不明白的地方,并且非常感谢一些指示 - 即使只是为了良好的相关阅读。

最佳答案

https://github.com/capistrano/capistrano/wiki/2.x-DSL-Action-Invocation-Run 显示运行的 :shell 选项,您可以将其设置为:

run "your cmd", :shell => "su - other_user -s bash"

如果使用预定义任务,最好重新定义 run 和 su 来合并 shell 选项。 这假设您的 ssh 用户可以在没有密码的情况下 su 。如果不使用 block 发送密码:

run "your cmd", :shell => "su - other_user -s bash" do |channel, stream, data|
  channel.send_data("#{other_user_password}\n")
end

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

相关文章:

ruby-on-rails - Heroku 应用程序在启动时无提示地失败

ruby-on-rails - Rails 内存缓存存储默认自动过期时间

python - Windows 上的 Unicode 更改控制台字体

ruby - 如何配置 capfile 以使用 curl 与 New Relic 通信?

css - Rails4 + PDFKit + 字体 + Heroku 不工作

ruby-on-rails - 从 Restful 身份验证迁移到设计

Ruby:检查Windows远程主机中是否安装了程序

ruby-on-rails - Watir-Webdriver - 协议(protocol)不支持的地址族 - socket(2)

capistrano - Chef-solo 与 Capistrano 的集成

java - 自动在多个位置部署 Java 应用程序(RMI 服务器)