为远程命令设置umask

时间:2014-01-30 19:26:38

标签: capistrano

如何通过ssh将在远程计算机上启动的进程定向为使用某个umask运行?我希望这也适用于作为标准Capistrano配方的一部分运行的命令,所以我不能只是显式调用命令的“umask”部分。

似乎没有读取远程机器上的〜/ .bash_profile,而是Capistrano调用远程命令的方式。

4 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,并在SSHKit.config.umask中使用当时未记录的config/deploy.rb来解决这个问题。请注意,这将为每个ssh命令设置umask

答案 1 :(得分:2)

umask 0002 放入您用于部署的用户帐户的 .bashrc

答案 2 :(得分:0)

同意Alain - 在.bashrc而不是.bash_profile中设置umask。在典型设置中使用Capistrano进行部署时,默认情况下不会加载.bash_profile。阅读the difference between .bashrc and .bash_profile将有助于理解两者的目的。 我在.bashrc文件中设置了环境变量,当我部署或运行​​任何其他带有capistrano的命令时,它们肯定会被使用。

另一个选项是在开始在部署上创建文件之前创建一个设置umask值的任务。例如,在第3章中,您可以使用:

task :set_umask do
  on roles(:all) do |host|
    execute "umask 0002"
  end
end
before "deploy:starting", "set_umask"

答案 3 :(得分:0)

@ beauby使用SSHKit的答案很好,但它仅适用于Capistrano 3,因为Capistrano 2不使用SSHKit。

umask和Capistrano相关的常见问题是bundle install安装具有过于严格限制的权限的gem。对于这个具体问题,我为Capistrano 2找到的解决方案是:

namespace :bundle do
  task :postinstall do
    run "chmod -R u=rwX,go=rX #{bundle_dir}"
  end
end

after 'bundle:install', 'bundle:postinstall'