【问题标题】:How to set a default shell or sudo to a user in capistrano 3如何在 capistrano 3 中为用户设置默认 shell 或 sudo
【发布时间】:2015-06-25 19:56:29
【问题描述】:

我目前正在从 Capistrano 2.x 迁移到 Rails 应用程序的 3.x 并遇到以下问题。服务器上的常规设置包含一个部署用户,该用户应负责部署,但是当用户进行部署时,他们会使用自己的用户名连接到服务器。

在 Capistrano 2.x 中,我可以使用 default_shell 选项完成此操作。

set :default_shell, "sudo -u deploy /bin/sh"

这在 Capistrano 3.x 中不起作用。有没有办法在前钩子中设置 shell 或 sudo 到部署用户?

我尝试过的事情:

  1. 设置:default_shell 选项不起作用。
  2. 我尝试在 before 钩子中对用户进行 sudo-ing。 sudo -s -u deploy 之类的东西,在 capistrano 之外也能正常工作。顺便说一下,我的用户设置为部署用户的无密码 sudo。但在 Capistrano 中,它运行命令然后就挂起。
  3. 根据this SO question,似乎可以在每个命令前添加sudo -u deploy,但这似乎并不完全有效。输入几个命令后,部署仍然中止,但在权限被拒绝时以我的用户身份执行异常。
  4. 我可以将某些命令单独映射为SSHKit.config.command_map[:git] = 'sudo -u deploy git',但这似乎不是最好的方法,而且我没有需要映射的所有命令的列表。

更新: 根据我的第三次尝试,映射所有命令通常似乎有效。

SSHKit.config.command_map = Hash.new do |hash, command|
  hash[command] = "sudo -u deploy #{command}"
end

但不完全。 capistrano 做的第一件事就是运行 git:check,它会上传文件 /tmp/git-ssh.sh。但是这个文件是由我的用户而不是部署用户创建的。

【问题讨论】:

标签: ruby-on-rails git shell capistrano capistrano3


【解决方案1】:

如果您只需要更改部署用户,在 capistrano 3 中会容易得多。假设你有这个文件结构:

config
|__deploy
   |__production.rb
   |__staging.rb

Capfile

然后在您的 production.rb 或 staging.rb 中(取决于您要部署到的环境):

set :user, 'deploy'

server 'example.com', user: fetch(:user)

【讨论】:

  • 可以,可以设置用户,但是连接后不能切换。设置安全性的方式我无法以 deploy 身份登录。
猜你喜欢
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
  • 2017-08-16
  • 2018-09-05
  • 2018-07-10
相关资源
最近更新 更多