使用Capistrano v3 ,如何通过su
作为其他用户运行所有远程任务?我在官方文档(http://capistranorb.com/)
对于我的用例,每个虚拟主机都有一个SSH用户和一个用户。用户A连接到服务器,应该以用户B的身份运行所有命令。
答案 0 :(得分:0)
这不是一个很好的答案,但我不认为如果没有代码修改你可以做什么。原因如下:
有两种主要情况可供您使用其他用户:
在第一种情况下,您通常只是告诉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-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
你可能会有类似的成功。
答案 1 :(得分:-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
希望这能解决你的问题!!!