Je me demande s'il existe un moyen d'exécuter un script / des commandes à partir de la machine locale sans apporter de modifications en tant que root sur la machine distante?
Quelques antécédents
J'essaie de configurer certaines tâches via Capistrano et j'ai besoin d'un sudo
accès. Il y a environ 30+ serveurs et pour moi, la mise à jour manuelle /etc/sudoers
sera douloureuse, donc je me demandais s'il y avait une méthode pour mettre à jour ce fichier à distance?
fabric.contrib.files.sed
méthode.Réponses:
Vous pouvez exécuter des scripts locaux à distance en exécutant
bash
sur le système distant et en l'alimentant votre script$ ssh user@host 'bash -s' < script.sh
Éditer
Pour exécuter des commandes nécessitant une utilisation
sudo
sur une machine distante, utilisez l'ssh's
-t
option et passez les commandes àssh
. L'-t
option alloue un pseudo tty et permet à l'utilisateur d'interagir avec les commandes exécutéesssh
, telles que la saisie d'un mot de passe poursudo
La modification d'un fichier à l'aide de cette méthode
sed
est recommandée par rapport à une redirection>
car la redirection shell ne permet pas d'écrire des fichiers lors de l'utilisationsudo
. De plus, toutes les variables de lased
commande doivent être échappées lorsqu'elles sont passées àssh
.Pour automatiser le tout:
la source
/etc/sudoers
fichier en raison des autorisations root, il échouera.sudo
mot de passe qui, d'après ce que je comprends, est défini dans/etc/sudoers
sudo
droits sur ces machines, alors pour le modifier,/etc/sudoers
vous devrez vous connecter via ssh en tant queroot
. Donc, le commandement seraitssh root@host -t 'sed -i "\$a text to insert" /path/to/file'
J'ai trouvé la
tee
commande utile pour éviter la limitation sudo de la redirection de fichiers. L'utilisation de sed s'est avérée frustrante en raison des exigences d'évasion des personnages.Voici la commande que j'ai utilisée pour ajouter à distance les hôtes de toutes les machines de mon cluster à / etc / hosts:
La sortie de chaque itération ressemble à ceci:
Cette réponse SU a été cruciale dans la construction de ma solution finale: https://superuser.com/a/1026359/587485
la source
Si vous devez exécuter plusieurs commandes ou redirections, vous devez utiliser la syntaxe suivante:
la source
Vous devez déjà avoir une sorte d'accès au niveau racine, via le mot de passe root direct ou la configuration de votre règle sudo id utilisateur avant de tenter de modifier le fichier sudoers.
la source