Posso accedere a una macchina remota come utente che può eseguire sudo su - . Non riesco ad accedere come root.
Ho uno script in locale che voglio eseguire sulla macchina remota. Inoltre, lo script viene inviato lì tramite un altro script.
Non riesco a capire come. Ho scritto un bel po' di domande e risposte qui, ma senza successo. Il più vicino che ho:
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
Questo finisce con questo output:
======== [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.
 Questo è il "più vicino" perché vede i singoli comandi ma non è sotto sudo , perché la prima riga è <<EOF non è (non)eseguito correttamente l'escape.
 **Come dovrei eseguire uno script arbitrario in sudo su ssh ?"
Risposta accettata:
L'ho capito subito dopo aver postato.
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.
 Il ' extra Sembra che il problema fosse il comando SSH e dovevo anche creare la nuova riga tramite echo .
Tuttavia, non sono del tutto sicuro se questo sia solo un trucco fortunato o il modo giusto per farlo. Ad essere onesto, sono completamente perso nella valutazione delle citazioni di Bash 🙂