rails framework application ruby-on-rails capistrano capistrano3

ruby on rails - framework - Capistrano 3 sudo tarea



capistrano application (5)

La guía Capistrano 3 recomienda el uso de sudo sin contraseña. Esto le permite a su usuario menos privilegiado ejecutar el comando sudo sin tener que ingresar una contraseña a través del PTY.

Puede usar la tarea que Kentaro escribió anteriormente y agregar algo como lo siguiente a su archivo / etc / sudoers:

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

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

Quiero escribir una receta con Capistrano 3 ejecutando una tarea en el servidor remoto con sudo.

Con Capistrano 2 esto podría hacerse por ejemplo:

default_run_options[:pty] = true task :hello do run "#{sudo} cp ~/something /something" end

Con Capistrano 3 encontré:

set :pty, true

Pero no pude ejecutar una tarea que se ejecuta con sudo.

¿Cómo puedo ejecutar una tarea con sudo?


Normalmente escribo así:

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

Editar

Capistrano 3 no admite sudo con contraseña.

Sin embargo, creé una pequeña gem , que te permite usar sudo con contraseña en la tarea Capistrano 3.

Agregue gem al gem su aplicación:

# Gemfile gem ''sshkit-sudo''

Y requiere ''sshkit / sudo'' en tu Capfile:

# Capfile require ''sshkit/sudo''

Ahora, puedes ejecutar un comando con sudo de la siguiente manera:

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


Para resolver este problema, necesitaba agregar set :pty, true a mi archivo deploy.rb .

Ahora puedo ejecutar lo siguiente:

# 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

Esta tarea básicamente ejecuta un script de shell llamado restart.sh que tiene un comando dentro de sudo service nginx restart .


Si realmente necesita usar sudo , siempre puede asignar el comando como SSHKit.config.command_map[:rm] = ''sudo rm'' que hará que execute :rm en el comando rm adecuado con sudo . Si su usuario de despliegue está en los sudoers, las cosas funcionarán como se espera.


quieres "como el usuario termina", como

as "root" do execute :something end