GNU/Linux >> Tutoriels Linux >  >> Linux

Exécuter un fichier de script sur Ssh via Sudo ?

Je peux me connecter à une machine distante en tant qu'utilisateur qui peut faire sudo su - . Je ne peux pas me connecter en tant que root.

J'ai un script localement que je veux exécuter sur la machine distante. De plus, le script y est envoyé via un autre script.

Je ne peux pas comprendre comment. J'ai lu pas mal de questions-réponses ici, mais sans succès. Le plus proche que j'ai :

COMMAND_SSH="sudo -i <<'EOF'"`cat ./unifyServiceNode.sh`"\nEOF\n" ;;
...
while read HOST; do
  echo -e "nn======== [email protected]$HOST <-- $COMMAND_SSH =================nn";
  ssh -n -tt [email protected]$HOST "'$COMMAND_SSH'";
done < hosts.txt

Cela se termine par cette sortie :

======== [email protected] <-- sudo -i <<'EOF'
##
##  Creates a few links and scripts to unify the nodes maintainance.
##

  BB="/bb"
  NAME="bpds-api"
  NAME2="bpds-"

  mkdir -p $BB
  ln -s /opt/$NAME/logs/*.log $BB/log
  ln -s /opt/$NAME/conf/api/$NAME.yml $BB/conf.yml || ln -s /opt/$NAME/conf/api/$NAME2.yml $BB/conf.yml
  echo "systemctl ${1:-restart} "${@:2}" $NAME" > $BB/Sys
  echo "tail -${1:-500f} $BB/log" > $BB/Tail
  echo "nano $BB/conf.yml" > $BB/Conf
  chmod a+x $BB/Sys $BB/Tail $BB/Conf
  echo "export PATH=$PATH:$BB" >> ~/.bashrc
EOF
 =====================================


bash: sudo -i <<EOF': command not found
bash: line 14: /bb/Sys: Permission denied
bash: line 15: /bb/Tail: Permission denied
bash: line 16: /bb/Conf: Permission denied
chmod: changing permissions of ‘/bb/Sys’: Operation not permitted
chmod: changing permissions of ‘/bb/Tail’: Operation not permitted
chmod: changing permissions of ‘/bb/Conf’: Operation not permitted
bash: -c: line 18: unexpected EOF while looking for matching `''
bash: -c: line 19: syntax error: unexpected end of file
Connection to somehost.com closed.

C'est le "plus proche" car il voit les commandes individuelles mais n'est pas sous sudo , car le <<EOF de la première ligne n'est pas (dés)échappé correctement.

**Comment dois-je exécuter un script arbitraire sous sudo sur ssh ?"

Réponse acceptée :

J'ai compris peu de temps après avoir posté.

COMMAND_SSH="sudo -i <<'EOF'"`cat ./unifyServiceNode.sh``echo -e 'nEOF'` ;;

ssh -n -tt [email protected]$HOST "$COMMAND_SSH"; ## -n prevents reading the input. -tt forces TTY.

Le ' supplémentaire s autour de la commande SSH étaient le problème semble-t-il, et j'avais aussi besoin de faire la nouvelle ligne via echo .

Je ne sais pas trop si c'est juste un hack chanceux ou la bonne façon de le faire, cependant. Pour être honnête, je suis complètement perdu dans l'évaluation des citations de Bash 🙂


Linux
  1. Un script Bash peut-il être accroché à un fichier ?

  2. Ssh - Passer des mots de passe à un script ?

  3. Script Bash :vérifier si un fichier est un fichier texte ?

  4. Ssh – Trafic de tunnel via une autre machine via Ssh ?

  5. Exécuter le même script sur plusieurs serveurs via Ssh ?

35 exemples de scripts bash

SSHFS :montage d'un système de fichiers distant via SSH

Comment vérifier la syntaxe d'un script Bash sans l'exécuter ?

Variable dans Bash Script qui conserve sa valeur depuis la dernière exécution

Comment inclure un fichier dans un script shell bash

Pousser mon invite PS1 sur ssh