由于我绝对无法更改安全配置,因此我必须以联合用户 ssh 方式连接到我的所有设备myuser。
我的盒子上需要部署的所有东西都归我所有deployuser,我绝对无法改变这一点。
myuser可以假设用户deployuser并拥有所有 sudo 权限。
最终,我希望我的 Capistrano 部署能够像我deployuser从一开始就 ssh 一样运行,因此每个命令都deployuser作为/home/deployuser.
我可以使用任何我想要的 Capistrano 版本,但现在我正在尝试使用 Capistrano 3。
我创建了一个简单的 Capistrano 任务来测试是否可以对我知道属于 的文件执行操作deployuser。
desc "Check that we can access everything"
task :check_permissions do
on roles(:all) do |host|
execute("whoami")
execute("cp /tmp/file-owned-by-deploy-user /tmp/test-file")
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:上面的测试实际上并没有像人们预期的那样工作。我相信这是因为当您手动声明类似的内容时execute('command'),它会覆盖任何“以 X 用户身份执行此操作”的配置。更好的测试是运行您的cap environment deploy任务并查看失败的原因。
我尝试的第一件事是sshkit-backends-netssh_global,它在他们的文档中说他们完全处理这个用例。
我将其添加到我的 Capfile 中,然后尝试将其添加到deploy.rb甚至高于我的任务定义,以防万一:
require …Run Code Online (Sandbox Code Playgroud)