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 🙂