小编Liz*_*rtz的帖子

如何以 myuser 身份进行 ssh,但在 /home/deployuser 中以部署用户身份运行所有 Capistrano 命令

背景/问题

由于我绝对无法更改安全配置,因此我必须以联合用户 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 根据他们的文档

我尝试的第一件事是sshkit-backends-netssh_global,它在他们的文档中说他们完全处理这个用例。

我将其添加到我的 Capfile 中,然后尝试将其添加到deploy.rb甚至高于我的任务定义,以防万一:

require …
Run Code Online (Sandbox Code Playgroud)

ssh capistrano ruby-on-rails capistrano3

5
推荐指数
1
解决办法
742
查看次数

标签 统计

capistrano ×1

capistrano3 ×1

ruby-on-rails ×1

ssh ×1