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