Capistrano 3 sudo task

前端 未结 5 1461
被撕碎了的回忆
被撕碎了的回忆 2021-02-01 15:48

I want to write a recipe with Capistrano 3 executing a task on the remote server with sudo.

With Capistrano 2 this could be done for example:

default_run         


        
相关标签:
5条回答
  • 2021-02-01 15:57

    To resolve this issue I needed to add set :pty, true to my deploy.rb file.

    I can now run the following:

    # config valid only for Capistrano 3.1
    lock '3.1.0'
    
    set :application, 'APP_NAME'
    set :pty, true
    set :ssh_options, {:forward_agent => true}
    
    namespace :deploy do
    
      desc 'Restart NGINX'
      task :restart do
        on roles(:app), in: :sequence, wait: 1 do
           execute :sudo, "./restart.sh"
        end
      end
    
    end
    

    This task basically runs a shell script called restart.sh that has a command within sudo service nginx restart.

    0 讨论(0)
  • 2021-02-01 15:57

    If you really need to use sudo you can always map the command like SSHKit.config.command_map[:rm] = 'sudo rm' which will make execute :rm into the proper rm command invoked with sudo. If your deploy user is in the sudoers things will work as expected.

    0 讨论(0)
  • 2021-02-01 16:01

    I usually write like this:

    task :hello do
      on roles(:all) do |host|
        execute :sudo, :cp, '~/something', '/something'
      end
    end
    

    Edit

    Capistrano 3 does not support sudo with password.

    However, I created a small gem, which enables you to use sudo with password in Capistrano 3 task.

    Add sshkit-sudo to your application's Gemfile:

    # Gemfile
    gem 'sshkit-sudo'
    

    And require 'sshkit/sudo' in you Capfile:

    # Capfile
    require 'sshkit/sudo'
    

    Now, you can execute a command with sudo as follows:

    task :hello do
      on roles(:all) do
        sudo :cp, '~/something', '/something'
      end
    end
    
    0 讨论(0)
  • 2021-02-01 16:10

    The Capistrano 3 guide recommends the use of passwordless sudo. This allows your less-priveleged user execute the sudo command without having to enter a password via the PTY.

    You can use the task that Kentaro wrote above, and add something like the following to your /etc/sudoers file:

    deploy ALL=NOPASSWD:/bin/cp ~/something /something
    

    http://www.capistranorb.com/documentation/getting-started/authentication-and-authorisation/#toc_8

    0 讨论(0)
  • 2021-02-01 16:22

    you want "as user do end", like

    as "root" do
      execute :something
    end
    
    0 讨论(0)
提交回复
热议问题