La ejecución remota de archivos ssh no funciona

La ejecución remota de archivos ssh no funciona

Tengo un script bash test.shque contiene los siguientes comandos

#!/bin/bash

PASSWORD=""
USERNAME=""
REM_HOSTNAME='localhost'

FILES_TO_COPY="remote_exec.sh"


function scptmp {
    exec sshpass -p $PASSWORD scp -o "ConnectTimeout 3" \
        -o "StrictHostKeyChecking no" \
        -o "UserKnownHostsFile /dev/null" \
        "$@"
}

echo -e "\tCopying files to remote host..."
scptmp -r -q $FILES_TO_COPY $USERNAME@$REM_HOSTNAME:/tmp

echo -e "\tSet execution privs on remote file..."
sshpass -p "$PASSWORD" ssh -t -oStrictHostKeyChecking=no $USERNAME@$REM_HOSTNAME "echo $PASSWORD | sudo -S chmod +x /tmp/$FILES_TO_COPY"

echo -e "\Execute..."
sshpass -p "$PASSWORD" ssh -oStrictHostKeyChecking=no -t $USERNAME@$REM_HOSTNAME "echo $PASSWORD | sudo -S bash /tmp/$FILES_TO_COPY"

Y el remote_exec.shcon el siguiente contenido:

#!/bin/bash

hostname=`hostname`
mkdir $hostname

Cuando ejecuto el script con

bash test.sh

No recibo ningún error, pero remote_exec.shparece que no se ejecuta en el host ya que no se crea ningún directorio.

¿Alguien tiene una idea de cuál podría ser el problema?

Respuesta1

Con exec, reemplazas el shell actual con el proceso resultante de ejecutar el siguiente comando. Esto significa que cuando llama a su scptmpfunción, el proceso reemplaza el shell que actualmente está ejecutando su script sshpass. Cuando la sshpassutilidad de la función haya terminado de ejecutarse, el script ya no se ejecutará.

Respuesta2

Las comillas simples inhiben la evaluación de las variables dentro de ellas. Pruebe con comillas dobles:

sshpass -p $PASSWORD ssh -t user@host "echo $PASSWORD | sudo -S bash /tmp/remote_exec.sh"

Respuesta3

En mi caso, me estaba conectando al control remoto por primera vez con el usuario ejecutando el script. Por lo tanto, trate de

SSH <REMOTE_IP>

con el usuario afectado. Si aparece un mensaje sobre "autenticidad del host", entonces esto podría ser un problema.

The authenticity of host '<REMOTE-IP>' can't be established.
Are you sure you want to continue connecting (yes/no)? yes

Dependiendo del entorno y sus políticas, puede simplemente confirmar y reiniciar el script.

Respuesta4

Pruebe lo siguiente:

sshpass -p $PASSWORD ssh -t user@host<<EOF
echo uname -a
cd /tmp/ || exit 1
echo $PASSWORD | sudo -S bash ./remote_exec.sh
exit $?

EOF

información relacionada