a execução remota de arquivo ssh não está funcionando

a execução remota de arquivo ssh não está funcionando

Eu tenho um script bash test.shque contém os seguintes 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"

E remote_exec.shcom o seguinte conteúdo:

#!/bin/bash

hostname=`hostname`
mkdir $hostname

Quando executo o script com

bash test.sh

Não recebo nenhum erro, mas remote_exec.shparece que não foi executado no host, pois nenhum diretório foi criado.

Alguém tem uma ideia de qual pode ser o problema?

Responder1

Com exec, você substitui o shell atual pelo processo resultante da execução do comando a seguir. Isso significa que quando você chama sua scptmpfunção, o shell que está executando seu script no momento é substituído pelo sshpassprocesso. Quando o sshpassutilitário na função terminar de ser executado, o script não estará mais em execução.

Responder2

Aspas simples inibem a avaliação de variáveis ​​dentro delas. Experimente aspas duplas:

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

Responder3

No meu caso, eu estava me conectando ao controle remoto pela primeira vez com o usuário executando o script. Portanto, tente

SSH <REMOTE_IP>

com o usuário afetado. Se houver um aviso sobre "autenticidade do host", isso pode ser um problema.

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

Dependendo do ambiente e das suas políticas, você pode simplesmente confirmar e reiniciar o script.

Responder4

Experimente o seguinte:

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

informação relacionada