Capistrano 3 sudo tâche
Je veux écrire une recette avec Capistrano 3 de l'exécution d'une tâche sur le serveur distant avec sudo.
Avec Capistrano 2 ce qui pourrait être fait par exemple:
default_run_options[:pty] = true
task :hello do
run "#{sudo} cp ~/something /something"
end
Avec Capistrano 3 j'ai trouvé:
set :pty, true
Mais je ne pouvais pas passer à l'exécution d'une tâche en cours d'exécution avec la commande sudo.
Comment puis-je exécuter une tâche avec sudo?
:use_sudo
n'est pas un paramètre valide pour Capistrano 3. Voir ce liées billet
Vous devez vous connecter pour publier un commentaire.
La Capistrano 3 guide recommande l'utilisation de sudo sans mot de passe. Cela permet au moins priveleged utilisateur d'exécuter la commande sudo sans avoir à entrer un mot de passe via le PTY.
Vous pouvez utiliser la tâche que Kentaro écrit ci-dessus, et ajoutez les lignes suivantes à votre fichier /etc/sudoers:
http://www.capistranorb.com/documentation/getting-started/authentication-and-authorisation/#toc_8
J'ai l'habitude d'écrire comme ceci:
Modifier
Capistrano 3 ne prend pas en charge la commande sudo avec un mot de passe.
Cependant, j'ai créé un petit gem, ce qui vous permet d'utiliser sudo avec un mot de passe dans Capistrano 3 tâche.
Ajouter sshkit-sudo de votre application Gemfile:
Et ont besoin d'un sshkit/sudo " en vous Capfile:
Maintenant, vous pouvez exécuter une commande avec sudo comme suit:
sudo :'apt-get', '-y install curl'
Pour résoudre ce problème j'ai besoin d'ajouter
set :pty, true
à mondeploy.rb
fichier.Je peux maintenant utiliser la commande suivante:
Cette tâche s'exécute un script shell appelé
restart.sh
qui a une commande danssudo service nginx restart
.set :pty, true
vous pouvez exécuter des commandes sudo avec capistrano 3. Sinon, vous aurez unesudo stderr: sudo: no tty present and no askpass program specified
erreurs.set :ssh_options, {:forward_agent => true}
bundle install --deployment
, le déploiement du pavillon permet de s'assurer que les pierres sont installées dans le répertoire vendor pour lequel l'utilisateur a déjà accès. Ce dernier a résolu mon problèmevous voulez "en tant que l'utilisateur n'fin", comme
Si vous avez vraiment besoin d'utiliser
sudo
vous pouvez toujours la carte de la commande commeSSHKit.config.command_map[:rm] = 'sudo rm'
qui feraexecute :rm
dans le bonrm
commande invoquée avecsudo
. Si votre déployer utilisateur est dans le sudoers tout fonctionne comme prévu.